本文重点在于前面的原理理解和后面的Nginx服务的标准搭建步骤,前面会介绍Nginx服务的基本概念,如有偏差处,欢迎大家指正,谢谢。
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器。可以作为一个HTTP服务器进行网站的发布处理,同时也可以作为反向代理进行负载均衡的实现。其主要特点有:
占有内存少,并发能力强。Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接。高度的模块化和自由软件许可证使得第三方模块非常丰富。Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上。Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。
master 进程能监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的 worker 进程。
master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
worke进程worker进程则是处理基本的网络事件。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。
Nginx 是一个高性能的 Web 服务器,能够同时处理大量的并发请求。它结合多进程机制和异步非阻塞机制 。
多进程机制:服务器每当收到一个客户端请求时,就有服务器主进程 (master process)生成一个子进程(worker process)和客户端建立连接进行交互,直到连接断开,该子进程就结束了。
异步非阻塞机制:每个工作进程使用异步非阻塞方式,可以处理多个客户端请求 。当某个工作进程接收到客户端请求以后,调用 IO 进行处理,如果不能立即得到结果,就去处理其他请求(即为非阻塞 )。而客户端在此期间也无需等待响应,可以进行其他任务(即为 异步 )。当IO返回时,就会通知此工作进程。该进程得到通知,暂时挂起当前处理的事务去响应客户端请求。
实验目的:掌握Nginx服务的基本搭建以及常规设置。
实验准备:C6标准虚拟机三台。(selinux与防火墙已关闭)
ps:标准虚拟机安装见网络阶段Centos6安装指南
实验规划:10.0.0.140(Nginx服务端)
10.0.0.150 (访问测试机1)
10.0.0.160 (访问测试机2)
10.0.0.170 (访问测试机3)
准备一个支持httpd2.0的openssl安装包
Nginx选择1.13.8版本
解压安装包
tar -zxvf nginx-1.13.8.tar.gz tar -zxvf openssl-1.0.2h.tar.gz创建Nginx运行用户,开始编译安装。
useradd -s /sbin/nologin -M nginx cd nginx-1.13.8/ ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-openssl=/root/openssl-1.0.2h --with-stream make && make install检查配置文件
/usr/local/nginx/sbin/nginx -t启动服务
/usr/local//nginx/sbin/nginx浏览访问测试
http://10.0.0.140/Nginx成功开启。
以下实验环境推荐使用LNMP环境,详情见LNMP环境搭建
编辑Nginx配置文件
vim /usr/local/nginx/conf/nginx.confps:nginx.conf.default文件是配置文件备份。
在server区域添加以下模块模块描述信息。
#Nginx 状态统计模块 location /nginx-status { stub_status on; sccess_log off; }保存退出,热重启Nginx。
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid ) /usr/local/nginx/sbin/nginx重启命令过长,可以将两条命令写入自定义命令中。
vim /usr/local/bin/ncq添加以下信息
#!/bin/bash kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid ) && sleep 2s && /usr/local/nginx/sbin/nginx赋予权限
chmod a+x /usr/local/bin/ncq访问测试
http://10.0.0.140/nginx-statusActive connections: 1 活跃连接的数量
server accepts handled requests 3 3 2
总共处理的连接 成功握手的次数 总共处理的请求
Reading: 0 Writing: 1 Waiting: 1 正在读取客户端的连接数 响应数据到客户端的量 驻留的连接
访问模块开启成功。
编辑主配置文件
vim /usr/local/nginx/conf/nginx.conf在location模块内添加以下描述信息
stub_status on; auth_basic "Welcome to dadami"; auth_basic_user_file /usr/local/nginx/html/a.psd;创建daqiang用户
htpasswd -c /usr/local/nginx/html/a.psd daqiang重启服务,开始访问测试。
http://10.0.0.140/提示需要用户名登陆,使用刚刚创建的daqiang用户登陆。
登陆成功,目录保护生效。
编辑主配置文件
在location监控模块下添加以下信息
allow 10.0.0.160; deny 10.0.0.0/24;将目录保护注释。
保存退出,重启服务,开始访问测试。
10.0.0.160访问测试
curl 10.0.0.140/nginx-status10.0.0.160访问成功。
10.0.0.170访问测试
curl 10.0.0.140/nginx-status10.0.0.170访问提示权限拒绝。
编辑主配置文件
在location监控模块下添加以下信息
deny 10.0.0.150; allow 10.0.0.0/24;保存退出,重启服务,开始访问测试。
10.0.0.160访问测试
curl 10.0.0.140/nginx-status10.0.0.170访问测试
curl 10.0.0.140/nginx-status10.0.0.150访问测试
curl 10.0.0.140/nginx-status只有10.0.0.150被拒绝,10网段访问正常。
还原主配置文件后,编辑主配置文件。
vim /usr/local/nginx/conf/nginx.conf添加server1模块 (此模块在主配置文件中有模版)
#www.daqiang.com server { listen 80; server_name www.daqiang.com; #charset koi8-r; # # #access_log logs/host.access.log main; location / { root html/daqiang; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }ps:注意大括号数量
添加server2模块
#www.dadami.com server { listen 80; server_name www.dadami.com; #charset koi8-r; #access_log logs/host.access.log main; location / { root html/dadami; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }保存退出,创建两个站点的目录文件。
mkdir /usr/local/nginx/html/daqiang mkdir /usr/local/nginx/html/dadami创建html文件(方便区分两个站点)
echo "dami" > /usr/local/nginx/html/dadami/index.html echo "daqiang" > /usr/local/nginx/html/daqiang/index.html修改两个站点的属主与属组。
chown nginx:nginx -R /usr/local/nginx/html/daqiang/ chown nginx:nginx -R /usr/local/nginx/html/dadami/使用windows浏览器进行访问测试。
将站点写入hosts文件中。
C:\Windows\System32\drivers\etc\hosts
重启服务,浏览器开始访问测试。
http://www.dadami.com/
http://www.daqiang.com/
此实验需要两台虚拟机或者更多虚拟机。
10.0.0.150 apache虚拟机配置
yum -y install httpd echo "apache" > /var/www/html/index.html systemctl httpd start检测是否解析
curl localhost成功解析,apache测试机搭建完毕。
还原Nginx配置文件
cd /usr//usr/local/nginx/conf/ cp -a nginx.conf.default nginx.conf编辑主配置文件,修改location模块
proxy_pass http://10.0.0.150:80;保存退出,重启服务。
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid ) /usr/local/nginx/sbin/nginx浏览器开启无痕开始访问测试
http://10.0.0.140/成功跳转。
还原Nginx主配置文件
cd /usr//usr/local/nginx/conf/ cp -a nginx.conf.default nginx.conf清除缓存
cd /usr/local/nginx/sbin/nginx rm -rf client_body_temp/ fastcgi_temp/ proxy_temp/ scgi_temp/ uwsgi_temp/在http模块内,在server模块以外,创建upstream模块。
upstream dadami.com { server 10.0.0.150:80; server 10.0.0.160:80; }在server模块内,修改location区域:
location / { proxy_pass http://dadami.com; }虚拟机需要安装apache (yum与源码安装均可)
10.0.0.150 配置html文件
echo "apache1" > /var/www/html/index.html重启服务,访问测试。
service httpd start curl localhost10.0.0.160 配置html文件
echo "apache2" > /var/www/html/index.html重启服务,访问测试。
service httpd start curl localhost检查配置文件,检测无误后重启服务。
/usr/local/nginx/sbin/nginx -t kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid ) /usr/local/nginx/sbin/nginx浏览器开启无痕进行访问测试
点击刷新
负载均衡构建成功!!
真实生产环境,网页文件都在同一台服务器上!!
还原Nginx主配置文件。
编辑主配置文件,增加一台虚拟主机。
vim /usr/local/nginx/conf/nginx.conf配置主机www.dadami.com
#www.dadami.com server { listen 80; server_name www.dadami.com; location / { root html/dadami; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }配置虚拟主机www.daqiang.com
在虚拟主机区域处添加跳转规则
rewrite ^(.*)$ http://www.dadami.com permanent;
#www.daqiang.com server { listen 80; server_name www.daqiang.com; location / { rewrite ^(.*)$ http://www.dadami.com permanent; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }保存退出,测试主配置文件是否有语法错误。
/usr/local/nginx/sbin/nginx -t测试无误,重启服务。
kill -HUP $( cat /usr/local/nginx/logs/nginx.pid )浏览器开启无痕模式,开始访问测试。
http://www.daqiang.com/自动跳转至dadami。
ps:本试验设置简单密码123456。
分别输入私钥密码,国家,省份,城市,组织名,组织别名,域名,管理员邮箱,其余两项回车跳过。
编辑主配置文件。
vim /usr/local/nginx/conf/nginx.conf在需要开启https的server模块内,添加下列信息。
ssl on; ssl_certificate server.crt; ssl_certificate_key server.key; ssl_session_timeout 5m; ssl_protocols TLSv1; ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; ssl_prefer_server_ciphers on;ps:注意修改端口号。
保存退出,测试主配置文件是否有语法错误。
/usr/local/nginx/sbin/nginx -t检测通过,重启服务。
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid ) /usr/local/nginx/sbin/nginx成功访问。
强制跳转需要使用虚拟主机与地址跳转功能
编辑主配置文件
vim /usr/local/nginx/conf/nginx.conf添加虚拟主机,设置跳转规则。
server { listen 80; server_name www.dadami.com root html; index index.html index.htm; rewrite ^(.*)$ https://www.dadami.com permanent; }保存,检查配置文件是否出错。
/usr/local/nginx/sbin/nginx -t重启服务,开始访问测试。
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid ) /usr/local/nginx/sbin/nginx浏览器开启无痕模式进行访问测试。
www.dadami.com自动跳转至https访问。
本文档于2020年10月22日由Vonmerlot重新整理。
