Nginx

nginx 特性:

1. nginx是模块化设计的,有较好的扩展性;

2. 高可靠性

master/worker 的设计模式

加载并分析配置文件是由master来实现的

worker是nginx响应客户请求的

在nginx中master进程只能有一个,但是worker进程可以根据cpu来调整

3. 支持热部署

不停机(不停止服务)更新配置文件,更换日志文件,更新服务器程序版本,在服务不停机的情况下将老版本更新成新版本是完全没有问题的可以称之为平滑升级;

4. 低内存消耗

例如:10000个keep-alive的连接模式下的非活动连接,仅消耗2.5M内存

5. 支持event-driven,aio,mmap等较新型的IO技术

nginx的基本功能:

1. 首先大家要知道,nginx是一个静态资源的web服务器,它自身只能接受http请求并返回;

2. 可以做http协议的反向代理服务;

3. 同时nginx还是pop3,smtp,imap4等邮件服务的反向代理,这个很少用到,反正我是没有用到过

4. 能缓存打开的文件(仅限于元数据)、支持FastCHI(和php-fpm交互)等协议

5. 模块化(非DSO机制的),过滤器zip,ssi,ssl;

web服务相关的功能:

1. 虚拟主机(server),做过apache的人知道,apache有一个虚拟主机的功能,可以根据不同的端口,主机名,域名来实现,同样nginx也有这个功能

2. keepalive,长链接,多数和keepalive软件相结合来实现的,多用于负载均衡

5. 路径别名,可以在配置文件来使用alias来设置路径访问别名

6. 基于IP及用户的访控制

7. 支持速率限制及并发数控制等等,在优化的时候会修改这两项配置

还有许多,就不在这里一一介绍了

nginx 的基本架构:

1. master/worker模型

一个master进程,可生成一个或者多个worker进程;

通过nginx事件驱动来响应用户请求,例如:epoll,/dev/poll

消息通知功能:select,poll

支持sendfile,sendfile64

支持AIO,mmap

master:加载配置文件,管理worker进程、平滑升级

worker:http服务,http代理

模块类型:

1. 核心模块:core,module 标准的

2. Standard HTTP modules 标准的

3. Optional HTTP modules 可选的,编译的时候可选择加不加入编译

4. Mail modules 可选的,编译的时候可选择加不加入编译

5. 3rd party modules 可选的,编译的时候可选择加不加入编译

用来做什么?

1. 静态资源服务器

一般结合apache来使用,因为nginx只能处理静态资源,配合apache的话,动态访问apache静态访问nginx,更加有效的提高了访问速度;

2. HTTP服务器的反向代理

下面来简单说下源码安装nginx吧

nginx 安装配置

1. nginx在redhat是没有被收录进官方的发行版本的,所以要epl源来安装,前提是能连接互联网,直接在nginx.org官网中就有epl的yum仓库源

2. nginx有三种版本

nginx stable 稳定版本

稳定版本是nginx官方不断的修改bug的版本

nginx mainline 主线版本 不建议在生产上使用

主线版本是nginx官方不断在添加新功能,知道确定稳定好才会发行的

次版本号为偶数的, 多为传统版本

3. 编译安装nginx

1).

 yum -y groupinstall “Development Tools” “Server Platform Development”

2). nginx源码包安装一般依赖于以下几个组件(必须保证这三个报的开发包是安装好的)

PCRE library 主要是在url重新的时候支持poll扩展字符设定的

zlib library 传输压缩的

openssl 支持ssl

yum -y install openssl-devel pcre-devel zlib-devel

3).

[root@localhost ~]# wget http://nginx.org/download/nginx-1.8.1.tar.gz #使用wget下载Nginx
[root@localhost ~]# ls
anaconda-ks.cfg install.log.syslog 公共的 视频 文档 音乐
install.log nginx-1.8.1.tar.gz 模板 图片 下载 桌面
[root@localhost ~]# tar zxf nginx-1.8.1.tar.gz
[root@localhost ~]# cd nginx-1.8.1
[root@localhost nginx-1.8.1]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[root@localhost nginx-1.8.1]# useradd -r -s /sbin/nologin nginx

 

4) ./configure –help 查询帮助

[root@localhost nginx-1.8.1]# ./configure –prefix=/usr/local/nginx –user=nginx –group=nginx –with-http_ssl_module –with-http_stub_status_module –with-http_gzip_static_module –with-http_gunzip_module –with-debug –with-pcre

–user=nginx 指明用户

–group=nginx 用户所在组

–with-http_ssl_module 默认没有启用,需要起来

–with-http_stub_status_module 启动状态页面

–with-http_gzip_static_module 支持gzip压缩

–with-debug 有必要的话,启用debug

编译完成后一定要确认epoll这个模块是被编译进去的,默认就在编译列表中的,要是没有编译成功为有大问题

5) .make && make install

4. 启动nginx服务

1). /usr/local/nginx/sbin/nginx -t 测试语法

2). /usr/local/nginx/sbin/nginx 启动nginx服务

3). /usr/local/nginx/sbin/nginx -s stop 平滑关闭服务

4).设置服务变量

[root@localhost nginx-1.8.1]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
[root@localhost nginx-1.8.1]# which nginx
/usr/sbin/nginx

5).设置服务启动脚本

[root@localhost nginx-1.8.1]# cat /etc/init.d/nginx 

#!/bin/sh
#

#nginx - this script starts and stops the nginx daemin
#

chkconfig: - 85 15

description: Nginx is an HTTP(S) server, HTTP(S) reverse \

proxy and IMAP/POP3 proxy server

processname: nginx

config: /usr/local/nginx/conf/nginx.conf

pidfile: /usr/local/nginx/logs/nginx.pid

Source function library.

. /etc/rc.d/init.d/functions

Source networking configuration.

. /etc/sysconfig/network

Check that networking is up.

[ “$NETWORKING” = “no” ] && exit 0

nginx=”/usr/local/nginx/sbin/nginx”
prog=$(basename $nginx)

NGINX_CONF_FILE=”/usr/local/nginx/conf/nginx.conf”

lockfile=/var/lock/subsys/nginx

start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $”Starting $prog: “
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
echo -n $”Stopping $prog: “
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
configtest || return $?
stop
start
}

reload() {
configtest || return $?
echo -n $”Reloading $prog: “
killproc $nginx -HUP
RETVAL=$?
echo
}

force_reload() {
restart
}

configtest() {
$nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
status $prog
}

rh_status_q() {
rh_status >/dev/null 2>&1
}

case “$1” in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $”Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}”
exit 2
esac
6).添加系统服务

[root@localhost nginx-1.8.1]# chmod +x /etc/init.d/nginx   #执行权限
[root@localhost nginx-1.8.1]# chkconfig –add nginx #添加为系统服务
[root@localhost nginx-1.8.1]# chkconfig –level 3 nginx on #字符级别开机自启
[root@localhost nginx-1.8.1]# chkconfig –list nginx
nginx 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:关闭 6:关闭
[root@localhost nginx-1.8.1]# service nginx restart
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
停止 nginx: [确定]
正在启动 nginx: [确定]

4.设置防火墙规则

[root@localhost ~]# iptables -I INPUT -m multiport -p tcp –dport 80 -j ACCEPT
[root@localhost ~]# service iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
[root@localhost ~]# iptables -vnL INPUT
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 multiport dports 80

5.访问测试

在Linux系统中,可以使用如下俩命令访问测试!

[root@localhost ~]# curl 127.0.0.1
[root@localhost ~]# elinks 127.0.0.1

如果输出如下内容,说明可以服务正常

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.
 

-------------本文结束感谢您的阅读-------------