Nginx (“engine x”) 是一个高性能的HTTP 和反向代理 服务器,在大负载的情况下表现十分优秀。本文简单介绍一下安装、web服务和反向代理服务配置方法。
1. 安装ngnix
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
yum -y install pcre-devel zlib-devel openssl-devel openssl gcc make # 下载目前的stable版 wget http://nginx.org/download/nginx-1.6.2.tar.gz tar xvzf nginx-1.6.2.tar.gz # nginx目录为/opt/nginx/1.6.2,使用nginx用户来启动 # 详细的编译配置信息请参考:http://www.nginx.cn/install ./configure --prefix=/opt/nginx/1.6.2 --user=nginx --with-openssl=/usr/lib64/openssl # 编译安装 make -j && make install # 添加用户和组 groupadd nginx useradd -g nginx nginx echo "nginx" | passwd --stdin nginx # 创建符号链接 ln -s /opt/nginx/1.6.2/sbin/nginx /usr/local/bin/nginx # 启动ngnix ngnix # 检查端口80是否被监听,该端口在/opt/nginx/1.6.2/conf/nginx.conf中已经有一个默认的server中定义 lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 15050 root 6u IPv4 95462 0t0 TCP *:http (LISTEN) nginx 15051 nginx 6u IPv4 95462 0t0 TCP *:http (LISTEN) # 可以直接发送SIGKILL信号给nginx主进程 pkill nginx |
2. nginx常用命令
(1). 启动时指定配置文件
nginx -c /opt/nginx/1.6.2/conf/nginx.conf
(2). 运行时重载配置文件
当nginx主进程接收到重载配置文件的命令后,它会先检查新配置文件的合法性,然后将该配置文件应用。然后,主进程会启动一个新的工作进程,并发送关闭请求给旧的工作进程。旧的工作进程接收到关闭请求后,会停止接受新的连接,并继续服务旧的连接请求直到所有的请求完成后才退出。
nginx -s reload
(3). 运行时快速关闭nginx
nginx -s stop
(4). 运行时优雅关闭nginx
所有的工作进程会停止接受新的连接,并继续服务旧的连接请求直到所有的请求完成后才退出。
nginx -s quit
(5). 运行时重新打开日志文件
ngnix -s reopen
(6). 测试配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
yum -y install pcre-devel zlib-devel openssl-devel openssl gcc make # 下载目前的stable版 wget http://nginx.org/download/nginx-1.6.2.tar.gz tar xvzf nginx-1.6.2.tar.gz # nginx目录为/opt/nginx/1.6.2,使用nginx用户来启动 # 详细的编译配置信息请参考:http://www.nginx.cn/install ./configure --prefix=/opt/nginx/1.6.2 --user=nginx --with-openssl=/usr/lib64/openssl # 编译安装 make -j && make install # 添加用户和组 groupadd nginx useradd -g nginx nginx echo "nginx" | passwd --stdin nginx # 创建符号链接 ln -s /opt/nginx/1.6.2/sbin/nginx /usr/local/bin/nginx # 启动ngnix ngnix # 检查端口80是否被监听,该端口在/opt/nginx/1.6.2/conf/nginx.conf中已经有一个默认的server中定义 lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 15050 root 6u IPv4 95462 0t0 TCP *:http (LISTEN) nginx 15051 nginx 6u IPv4 95462 0t0 TCP *:http (LISTEN) # 可以直接发送SIGKILL信号给nginx主进程 pkill nginx |
(7). 查看nginx版本
1 2 |
nginx -v nginx version: nginx/1.6.2 |
3. 配置静态内容
在debugo03和debugo04上,打开配置文件,修改下面的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
worker_processes 1; events { worker_connections 1024; } http { ...... server { listen 80; server_name localhost; location / { root /var/www/html; index index.html index.htm; } } |
其中,启动了一个worker进程,一般情况下纯nginx的服务器可以将这个值配置为。在作为web服务器的情况下,nginx最大连接数为worker_connections * worker_processes.
listen监听本地所有地址端口80,也可以指定listen 192.168.111.10:80监听到某一地址上。
server_name指令主要用于配置基于名称的虚拟主机。支持通配符*(例如*.domain.com)或正则表达式(例如~^(?.+)\.domain\.com$)。参考关于Nginx的server_name
location /
指的是URL中“/”路径为下面的配置内容。包括该URL位置的root目录,并在该目录下依次寻找 index.html index.htm两个索引文件。一般的静态站点可以配置多个location,例如:
1 2 3 4 5 6 7 8 9 |
server { location / { root /data/www; } location /images/ { root /data/images; } } |
这里我们在debugo03和debugo04中“/”的index.html中配置一个简单的文本,仅包含主机名,用于后面的负载均衡测试。
4. 配置ngnix负载均衡
debugo01和debugo02作为两台负载均衡服务器,debugo03和debugo04作为两台web server
下面打开配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
vim nginx.conf worker_processes 1; events { worker_connections 1024; } http { keepalive_timeout 65; include upstream.conf; } vim upstream.conf upstream debugo_servers { server debugo03:80 weight=5; server debugo04:80 weight=10; } server { listen debugo01:80; location / { proxy_pass http://debugo_servers; } } |
测试如下,验证了轮询算法+权重的有效性。可以根据机器性能和目标设置不同的权重。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@debugo01 ~]# curl debugo01 debugo04 [root@debugo01 ~]# curl debugo01 debugo03 [root@debugo01 ~]# curl debugo01 debugo04 [root@debugo01 ~]# curl debugo01 debugo04 [root@debugo01 ~]# curl debugo01 debugo03 [root@debugo01 ~]# curl debugo01 debugo04 [root@debugo01 ~]# curl debugo01 debugo04 [root@debugo01 ~]# curl debugo01 debugo03 |
除了轮询和权重轮询以外,还包括下面三种算法:
IP Hash : 需要在upstream的配置中指定“ip_hash;”,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
fair:需要在upstream的配置中指定“fair;”按后端服务器的响应时间来分配请求,响应时间短的优先分配。
URL hash:需要在upstream中配置指定:“hash $request_uri; hash_method crc32;”按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
另外,在nignx中可以为每个 backend server 指定最大的重试次数和重试时间间隔。所使用的关键字是 max_fails 和 fail_timeout。而backup指的是仅当其他serverdown或者忙时才会请求这台server。例如:
1 2 3 4 |
upstream debugo_servers { server debugo01:80 weight=5 backup; server debugo02:80 weight=10 max_fails=3 fail_timeout=30s; } |
^^
难道四台都需要装nginx
服务器集群的话不应该有一台是配置nginx作为反向代理服务器的吗?
每一期我都会听。
你脚底皮肤也很薄吗