nginx服务器 作用:是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP代理服务器。

Nginx配置文件及目录: /usr/local/nginx 安装目录 -conf/nginx.conf 主配置文件 -html 网页目录 -logs 日志文件 -sbin/nginx 启动脚本

/usr/local/nginx/sbin/nginx –v 查看Nginx版本

/usr/local/nginx/sbin/nginx –V 查看编译参数

/usr/local/nginx/sbin/nginx –t 测试默认配置文件

/usr/local/nginx/sbin/nginx –c conf/nginx.conf 指定配置文件

查看服务相关进程及端口信息 ps aux |grep nginx

netstat -lnatpu |grep nginx

步骤一:构建Nginx服务器 1)使用源码包安装nginx软件包 yum –y install gcc pcre-devel(支持正则) openssl-devel (支持加密网站) //安装常见依赖包 useradd –s /sbin/nologin nginx 创建nginx用户 tar -xf nginx-1.8.0.tar.gz cd nginx-1.8.0 ./configure
--prefix=/usr/local/nginx \ //指定安装路径 --user=nginx \ //指定用户 --group=nginx \ //指定组 --with-http_ssl_module //开启SSL加密功能 make && make install //编译并安装

2)nginx命令的用法 /usr/local/nginx/sbin/nginx //启动服务 /usr/local/nginx/sbin/nginx -s stop //关闭服务 /usr/local/nginx/sbin/nginx -s reload //重新加载配置文件 /usr/local/nginx/sbin/nginx –V //查看软件信息

nginx服务默认通过TCP 80端口监听客户端请求: netstat -anptu | grep nginx

3)为Nginx Web服务器建立测试首页文件 Nginx Web服务默认首页文档存储目录为/usr/local/nginx/html/,在此目录下建立一个名为index.html的文件: touch /usr/local/nginx/html/index.html

步骤二:升级Nginx服务器 1)编译新版本nginx软件 tar -zxvf nginx-1.9.0.tar.gz cd nginx-1.9.0 ./configure
--prefix=/usr/local/nginx \ //指定安装路径 --user=nginx \ //指定用户 --group=nginx \ //指定组 --with-http_ssl_module //开启SSL加密功能 make

  1. 备份老的nginx主程序,并使用编译好的新版本nginx替换老版本 mv /usr/local/nginx/sbin/nginx >/usr/local/nginx/sbin/nginxold cp objs/nginx /usr/local/nginx/sbin/ //拷贝新版本 make upgrade //升级 /usr/local/nginx/sbin/nginx –v //查看版本

步骤三:客户端访问测试 1)分别使用浏览器和命令行工具curl测试服务器页面 firefox http://192.168.4.5 curl http://192.168.4.5

用户认证 访问Web页面需要进行用户认证 用户名为:tom,密码为:123456 通过Nginx实现Web页面的认证,需要修改Nginx配置文件,在配置文件中添加auth语句实现用户认证。最后使用htpasswd命令创建用户及密码即可。 步骤一:修改Nginx配置文件 1)修改/usr/local/nginx/conf/nginx.conf vim /usr/local/nginx/conf/nginx.conf .. .. server { listen 80; server_name localhost; auth_basic "Input Password:"; 认证提示符 auth_basic_user_file "/usr/local/nginx/pass"; 认证密码文件 location / { root html; index index.html index.htm; } }

2)生成密码文件,创建用户及密码 使用htpasswd命令创建账户文件,需要确保系统中已经安装了httpd-tools。 yum -y install httpd-tools htpasswd -cm /usr/local/nginx/pass tom 创建密码文件 New password: 123456 Re-type new password: 123456 htpasswd -m /usr/local/nginx/pass jerry 追加用户,不使用-c选项

3)重启Nginx服务 usr/local/nginx/sbin/nginx –s reload
请先确保nginx是启动状态才可以执行命令成功,否则报错

步骤二:客户端测试 1)登录192.168.4.100客户端主机进行测试 firefox http://192.168.4.5 //输入密码后可以访问

基于域名的虚拟主机

实现两个基于域名的虚拟主机,域名分别为www.aa.com和www.bb.com 对域名为www.aa.com的站点进行用户认证,用户名称为tom,密码为123456 修改Nginx配置文件,添加server容器实现虚拟主机功能;对于需要进行用户认证的虚拟主机添加auth认证语句。 步骤一:修改配置文件 1)修改Nginx服务配置,添加相关虚拟主机配置如下 vim /usr/local/nginx/conf/nginx.conf .. .. server { 定义虚拟主机 listen 80; 端口 server_name www.aa.com; 域名 auth_basic "Input Password:"; 认证提示符 auth_basic_user_file "/usr/local/nginx/pass"; 认证密码文件 location / { 发布目录 root html; 指定网站根路径 index index.html index.htm; }

} … … server { listen 80;
server_name www.bb.com;
location / { root www;
index index.html index.htm; } }

2)创建账户及密码 htpasswd –cm /usr/local/nginx/pass tom 创建账户密码文件

3)创建网站根目录及对应首页文件 mkdir /usr/local/nginx/www echo "www" > /usr/local/nginx/www/index.html

4)重启nginx服务 /usr/local/nginx/sbin/nginx –s reload

步骤二:客户端测试 1)修改客户端主机192.168.4.100的/etc/hosts文件,进行域名解析 vim /etc/hosts 192.168.4.5 www.aa.com www.bb.com

2)登录192.168.4.100客户端主机进行测试 firefox http://www.aa.com 输入密码后可以访问 firefox http://www.bb.com 直接访问

SSL虚拟主机 域名为www.cc.com 该站点通过https访问 通过私钥、证书对该站点所有数据加密 源码安装Nginx时必须使用--with-http_ssl_module参数,启用加密模块,对于需要进行SSL加密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)。

步骤一:配置SSL虚拟主机 1)生成私钥与证书 cd /usr/local/nginx/conf openssl genrsa > cert.key 生成私钥 openssl req -new -x509 -key cert.key > cert.pem 生成证书

2)修改Nginx配置文件,设置加密网站的虚拟主机 vim /usr/local/nginx/conf/nginx.conf … …
server { 定义虚拟主机 listen 443 ssl; 开启SSL server_name www.cc.com;
ssl_certificate cert.pem; 指定证书文件 ssl_certificate_key cert.key; 指定私钥文件 ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }

步骤二:客户端验证 1)修改客户端主机192.168.4.100的/etc/hosts文件,进行域名解析 vim /etc/hosts 192.168.4.5 www.cc.com www.aa.com www.bb.com

2)登录192.168.4.100客户端主机进行测试 firefox https://www.cc.com //信任证书后可以访问

Nginx反向代理 轮询(默认):逐一循环调度 Weight:指定循环几率,权重值和访问比率成正比 ip_hash:根据客户端ip分配固定的后端服务器 down:表示当前server暂停不参与负载 max_fails:允许请求失败的次数(默认为1) fail_timeout:max_fails次失败后,暂停提供服务的时间 backup:备份服务器

后端做2台web服务器 Nginx采用轮询的方式调用后端Web服务器 两台Web服务器的权重要求设置为不同的值 最大失败次数为1,失败超时时间为30秒

例:使用4台RHEL7虚拟机,其中一台作为Nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.4.5和192.168.2.5,两台Web服务器IP地址分别为192.168.2.100和192.168.2.200。客户端测试主机IP地址为192.168.4.100

步骤一:部署实施后端Web服务器 1)部署后端Web1服务器 后端Web服务器可以简单使用yum方式安装httpd实现Web服务,为了可以看出后端服务器的不同,可以将两台后端服务器的首页文档内容设置为不同的内容。 yum -y install httpd echo "192.168.2.100" > /var/www/html/index.html systemctl restart httpd

2)部署后端Web2服务器 yum -y install httpd echo "192.168.2.200" > /var/www/html/index.html systemctl restart httpd

步骤二:配置Nginx服务器,添加服务器池,实现反向代理功能 1)修改/usr/local/nginx/conf/nginx.conf配置文件 vim /usr/local/nginx/conf/nginx.conf .. .. http { .. .. upstream webserver { 定义员服务器组 server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10; server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10; } .. .. server { listen 80; server_name www.tarena.com; location / { proxy_pass http://webserver; 调用服务组 } }

2)重启nginx服务 /usr/local/nginx/sbin/nginx –s reload

3)使用浏览器访问代理服务器测试轮询效果 curl http://192.168.4.5 //使用该命令多次访问查看效果

步骤二:配置upstream服务器集群池属性 1)设置失败次数,超时时间,权重 vim /usr/local/nginx/conf/nginx.conf .. .. http { .. .. upstream webserver {
server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10; server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10; } .. .. server { listen 80; server_name www.tarena.com;
location / { proxy_pass http://webserver;
} }

2)重启nginx服务 /usr/local/nginx/sbin/nginx –s reload

3)使用浏览器访问代理服务器测试轮询效果 curl http://192.168.4.5 //使用该命令多次访问查看效果

4)设置相同客户端访问相同Web服务器 vim /usr/local/nginx/conf/nginx.conf .. .. http { .. .. upstream webserver { ip_hash; server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10; server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10; } .. .. server { listen 80; server_name www.tarena.com; location / { proxy_pass http://webserver; } }

5)重启nginx服务 /usr/local/nginx/sbin/nginx –s reload

6)使用浏览器访问代理服务器测试轮询效果 curl http://192.168.4.5 使用该命令多次访问查看效果

Nginx优化主要从配置文件着手,常见优化参数如下:

worker_processes 与CPU核心数量一致 error_log 定义日志级别 worker_connections 每个worker最大并发连接数 server_tokens 服务器版本号信息 client_header_buffer_size 默认请求包头信息的缓存 large_client_header_buffers 大请求包头部信息的缓存个数与容量 error_page 404 自定义404错误页面

步骤一:构建Nginx服务器 1)源码安装Nginx软件 yum -y install gcc pcre-devel openssl-devel
useradd -s /sbin/nologin nginx tar -zxvf nginx-1.8.0.tar.gz cd nginx-1.8.0 ./configure
--prefix=/usr/local/nginx \ 指定安装路径 --user=nginx \ 指定用户 --group=nginx \ 指定组 --with-http_ssl_module 开启SSL加密功能 [root@svr5 nginx-1.8.0]# make && make install 编译并安装

2)启用Nginx服务并查看监听端口状态 /usr/local/nginx/sbin/nginx netstat -anptu | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10441/nginx

步骤二:优化前从客户机访问Nginx服务器测试 1)使用ab高并发测试 格式:ab -c并发数 -n总请求数 URL ab –n 2000 –c 2000 http://192.168.4.5/ Benchmarking 192.168.4.5 (be patient) socket: Too many open files (24) 提示打开文件数量过多

2)使用脚本测试长头部请求是否能获得响应 cat buffer.sh chmod +x buffer.sh ./ buffer.sh .. .. <center>414 Request-URI Too Large</center> 提示头部信息过大

3)客户端使用浏览器访问不存在的页面 firefox http://192.168.4.5/tt.html //访问不存在的页面

步骤三:优化Nginx服务器 1)修改Nginx配置文件 vim /usr/local/nginx/conf/nginx.conf .. .. worker_processes 2; 与CPU核心数量一致 events { worker_connections 65535; 每个worker最大并发连接数 use epoll; } http { open_file_cache max=2000 inactive=20s; 设置服务器最大缓存2000个文件句柄,关闭20秒内无请求 open_file_cache_valid 60s; 文件句柄有效时间是60秒,60秒后过期 open_file_cache_min_uses 5; 访问次数超过5次才被缓存 sendfile on; 提升Nginx读文件性能 tcp_nodelay on; 关闭TCP缓存延迟发送数据 keepalive_timeout 10; 保持连接的超时时间 server_tokens off; 不显示nginx版本号信息 client_header_buffer_size 1k; 默认请求包头信息的缓存
large_client_header_buffers 4 4k; 大请求包头部信息的缓存个数与容量 gzip on; 解压 gzip_min_length 1000; 1000字节以上解压 gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; server { listen 80; server_name www.tarena.com; location / { root html; index index.html index.htm; } location ~* .(jpg|jpeg|gif|png|css|js|ico|xml)$ { ~匹配正则* 不区分大小写 expires 30d; 定义客户端缓存时间为30天 } error_page 404 /40x.html; 自定义错误页面 location = /40x.html { root html; } } }

2)修改Linux操作系统最大打开文件数 通过修改/etc/security/limits.conf文件修改打开文件最大数量: vim /etc/security/limits.conf

  •           soft nofile     100000
    
  •           hard nofile     100000
    

ulimit –Hn 100000 ulimit –Sn 100000

3)提前生成404错误页面,供测试使用: vim /usr/local/nginx/html/40x.html ~~^^^Error^^^~

防盗链语句 location ~*.(gif/jpg/png/swf/flv)${ valid_referers none blocked www.baidu.com; if($invalid_referer) { rewrite ^/ http://www.baidu.com/40x.html; } }