¶一、简介
Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
¶二、编译安装
官方下载地址:http://nginx.org/en/download.html
版本号是双数的是稳定版,而单数则是开发版。
以下以编译安装来讲述。为什么选择编译安装而不选择yum或者apt包管理器安装呢?因为yum或者apt安装的是已经编译好的二进制文件,而已经编译好就说明扩展模块已经固定,很难去添加或者修改自定义的扩展模块,这里选择编译安装就是为了解决这个问题。
¶1.准备活动
1 | #下载 |
¶2. 安装编译工具及依赖库文件
1 | yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel |
¶3.编译并安装
1 | 进入解压好的源码目录 |
安装目录结构如下:
1 | /usr/local/nginx |
¶三、常用命令
¶1. 启动
1 | /usr/local/nginx/sbin/nginx |
查看是否启动命令: ps aux | grep nginx
¶2. 停止
1 | /usr/local/nginx/sbin/nginx -s stop |
¶3. 重启
1 | /usr/local/nginx/sbin/nginx -s reopen |
¶4. 动态加载
1 | /usr/local/nginx/sbin/nginx -s reload |
-
区别:
nginx -s quit:此方式停止步骤是待nginx进程处理任务完毕进行停止。
nginx -s stop:此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
nginx -s reload:动态加载,当配置文件nginx.conf有变化时执行该命令动态加载。
¶5. 检测配置文件正确性
1 | /usr/local/nginx/sbin/nginx -t |
¶6. 其他常用命令
1 | 查看编译加载的模块 |
¶四、yum安装
¶1. 安装yum源
1 | sudo yum install yum-utils |
设置官方yum源以能够使用最新版本
1 | vim /etc/yum.repos.d/nginx.repo |
1 | [nginx-stable] |
¶2. 安装nginx
1 | yum install nginx |
安装好后可以查看一些详细信息
1 | #查寻nginx |
Nginx安装⽬目录
1 | #查看安装目录 |
如下表格对 Nginx 安装⽬目录做详细概述
路路径 | 类型 | 作⽤ |
---|---|---|
/etc/nginx /etc/nginx/nginx.conf /etc/nginx/conf.d /etc/nginx/conf.d/default.conf |
配置文件 | Nginx主配置文件 |
/etc/nginx/fastcgi_params /etc/nginx/scgi_params /etc/nginx/uwsgi_params |
配置文件 | Cgi、Fastcgi、Uwcgi配置文件 |
/etc/nginx/win-utf /etc/nginx/koi-utf /etc/nginx/koi-win |
配置⽂文件 | Nginx编码转换映射文件 |
/etc/nginx/mime.types | 配置⽂文件 | http协议的Content-Type与扩展名 |
/usr/lib/systemd/system/nginx.service | 配置⽂件 | 配置系统守护进程管理器 |
/etc/logrotate.d/nginx | 配置⽂件 | Nginx⽇志轮询,⽇志切割 |
/usr/sbin/nginx /usr/sbin/nginx-debug |
命令 | Nginx终端管理命令 |
/etc/nginx/modules /usr/lib64/nginx /usr/lib64/nginx/modules |
⽬录 | Nginx模块⽬录 |
/usr/share/nginx /usr/share/nginx/html /usr/share/nginx/html/50x.html /usr/share/nginx/html/index.html |
⽬录 | Nginx默认站点⽬录 |
/usr/share/doc/nginx-1.12.2 /usr/share/man/man8/nginx.8.gz |
⽬录 | Nginx的缓存⽬录 |
/var/log/nginx | ⽬录 | Nginx的⽇志⽬录 |
Nginx编译参数
查看Nginx编译参数
1 | nginx -V |
下表展示了Nginx编译参数选项以及作⽤
编译选项 | 作⽤ |
---|---|
–prefix=/etc/nginx –sbin-path=/usr/sbin/nginx –modules-path=/usr/lib64/nginx/modules –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx.pid –lock-path=/var/run/nginx.lock |
程序安装⽬录和路径 |
–http-client-body-temp-path=/var/cache/nginx/clie nt_tem –http-proxy-temp-path=/var/cache/nginx/proxy_te mp –http-fastcgi-temp-path=/var/cache/nginx/fastcgi_ temp –http-uwsgi-temp-path=/var/cache/nginx/uwsgi_te mp –http-scgi-temp-path=/var/cache/nginx/scgi_temp |
临时缓存⽂件 |
–user=nginx –group=nginx |
设定Nginx进程启动⽤户和组(安全) |
–with-cc-opt | 设置额外的参数将被添加到CFLAGS变量 |
–with-ld-opt | 设置附加的参数, 链接系统库 |
¶五、常⽤模块
Nginx模块分为 Nginx官⽅模块以及Nginx第三⽅模块
Nginx编译选项 | 模块作⽤ |
---|---|
ngx_http_core_module | 包含⼀些核⼼的http参数配置,对应Nginx的配置区块部分 |
ngx_http_access_module | 访问控制模块,⽤来控制⽹站⽤户对Nginx的访问 |
ngx_http_gzip_module | 压缩模块,对Nginx返回的数据压缩,属于性能优化模块 |
ngx_http_fastcgi_module | fastci模块,和动态应⽤相关的模块,例如PHP |
ngx_http_proxy_module | proxy代理模块 |
ngx_http_upstream_modul | 负载均衡模块,可以实现⽹站的负载均衡功能及节点的健康检查。 |
ngx_http_rewrite_module | URL地址重写模块 |
ngx_http_limit_conn_modu | 限制⽤户并发连接数及请求数模块 |
ngx_http_limit_req_module | 限制Nginx request processing rate根据定义的key |
ngx_http_log_module | 访问⽇志模块,以指定的格式记录Nginx客户访问⽇志等信息 |
ngx_http_auth_basic_mod | Web认证模块,设置Web⽤户通过账号密码访问Nginx |
nginx_http_ssl_module | ssl模块,⽤于加密的http连接,如https |
¶六、内置变量
http核⼼模块的内置变量
http请求变量
Nginx内置变量
⾃定义变量
1 | uri: 当前请求的uri,不带参数 |
¶七、配置http服务
¶1. 前置准备
首先确保nginx主配置文件nginx.conf
的http
节点中导入conf/conf.d
目录(如果没有自行创建该目录)的所有配置文件。如下:
1 | http { |
¶2. 配置http服务
1 | vim conf.d/http.conf |
1 | # 第一个虚拟主机配置(静态资源服务器) |
¶八、负载均衡
¶1. 前置准备
首先确保nginx主配置文件nginx.conf
的http
节点中导入conf/conf.d
目录(如果没有自行创建该目录)的所有配置文件。如下:
1 | http { |
¶2. 配置nginx
1 | vim conf.d/load_balance.conf |
1 | upstream ops_load { |
¶九、动静分离
¶1. 环境准备(A主机和B主机)
这里的静态资源用图片来表示,而动态资源用jsp来表示。
上游服务主机(A主机)
ip:101.132.45.132
作用:提供静态资源和动态资源服务
(nginx提供静态资源资源+tomcat提供动态资源)
代理主机(B主机)
ip:198.23.188.200:
作用:承担反向代理的角色(nginx实现反向代理)
确保A和B主机的nginx主配置文件nginx.conf
的http
节点中导入conf/conf.d
目录(如果没有自行创建该目录)的所有配置文件。如下:
1 | http { |
¶2. A主机环境搭建
¶2.1 动态资源的准备
tomcat安装很傻瓜式,解压即用,这里就不详细介绍。
添加jsp到tomcat web根目录里
1 | vim /usr/local/apache-tomcat-8.5.31/webapps/ROOT/java_test.jsp |
1 | <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> |
运行tomcat
1 | sh /usr/local/apache-tomcat-8.5.31/bin/startup.sh |
¶2.2 静态资源的准备
编辑nginx配置文件配置静态资源访问控制
1 | vim conf.d/static.conf |
1 | server { |
在/usr/share/nginx/resource/img
目录里放一张logo.jpg的图片做测试,并且确保有访问权限
重新加载nginx配置
1 | nginx -s reload |
¶3. B主机环境搭建
配置反向代理调度策略
1 | vim conf.d/dynamic_static_proxy.conf |
1 | 配置静态资源请求的地址和端口 |
创建并配置代理参数文件
1 | vim /etc/nginx/proxy_params |
1 | 代理到tomcat等服务器时注意要设置请求参数,如果后端服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败,报400错误。故至少要包含proxy_set_header Host $http_host;为了方便,以下配置了跟多的请求参数。 |
重新加载nginx配置
1 | nginx -s reload |
¶4. 访问测试
在代理主机B主机上编写动静分离的页面做测试
1 | vim /usr/share/nginx/html/dynamic_static.html |
1 | <html lang="en"> |
访问代理主机B主机的测试页面
到这里nginx配置动静分类的应用服务就完成了。
¶十、配置https
这里以Let’ s Encrypt免费https CA证书为例。
¶1. 配置一个nginx站点
首先确保nginx主配置文件nginx.conf
的http
节点中导入conf/conf.d
目录(如果没有自行创建该目录)的所有配置文件。如下:
1 | http { |
1 | vim qcmoke.top.conf |
1 | server{ |
1 | nginx -s reload |
¶2. 安装certbot工具
1 | yum install -y epel-release |
¶3. 申请证书
1 | 使用方法:certbot certonly --webroot -w [Web站点目录] -d [站点域名] -m [联系人email地址] --agree-tos |
完整过程:
1 | [root@IllinformedMaroon-VM conf.d]# certbot certonly --webroot -w /usr/share/nginx/html -d qcmoke.top -m qcmoke@gmail.com --agree-tos |
证书的保存位置在/etc/letsencrypt/live/qcmoke.top/
:
1 | /etc/letsencrypt/live/qcmoke.top/ |
可以通过如下命令查看证书有效期
1 | openssl x509 -noout -dates -in /etc/letsencrypt/live/qcmoke.top/cert.pem |
💁♂如果需要letsencrypt实现泛域名解析,可以参考我的另外一篇教程:《centos7搭建个人的git pages》
¶4. 配置nginx使用证书开通https
¶4.1 配置PFS秘钥(可选)
生成Perfect Forward Security(PFS)键值,这步其实不做也可以。
1 | mkdir /etc/ssl/private/ -p |
- Perfect Forward Security(PFS)是个什么东西,中文翻译成
完美前向保密
,一两句话也说不清楚,反正是这几年才提倡的加强安全性的技术。如果本地还没有生成这个键值,需要先执行生成的命令。 - 生成的过程还挺花时间的,喝杯咖啡歇会儿吧。
¶4.2 配置nginx站点
1 | vim /etc/nginx/conf.d/qcmoke.top.conf |
1 | server { |
¶4.3 修改防火墙配置
1 | firewall-cmd --permanent --add-port=80/tcp |
到这里就配置完毕了,浏览器访问http://qcmoke.top
会自动跳转到https://qcmoke.top