Nginx全解析
Nginx全解析
什么是nginx
Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
什么是反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
简单的说就是用户请求反向代理服务器,反向代理服务器做请求分发,决定用户访问哪个服务器ip
安装Nginx与运行
-
去官网,推荐使用稳定版本
-
上传nginx到linux系统
-
安装依赖环境
(1)安装gcc环境
yum install gcc-c++
(2)安装PCRE库,用于解析正则表达式
yum install -y pcre pcre-devel
(3)zlib压缩和解压缩依赖,
yum install -y zlib zlib-devel
(4)SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
yum install -y openssl openssl-devel
-
解压,需要注意,解压后得到的是源码,源码需要编译后才能安装
tar -zxvf nginx-1.16.1.tar.gz
-
编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错
mkdir /var/temp/nginx -p
-
在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件
./configure \n --prefix=/usr/local/nginx \n --pid-path=/var/run/nginx/nginx.pid \n --lock-path=/var/lock/nginx.lock \n --error-log-path=/var/log/nginx/error.log \n --http-log-path=/var/log/nginx/access.log \n --with-http_gzip_static_module \n --http-client-body-temp-path=/var/temp/nginx/client \n --http-proxy-temp-path=/var/temp/nginx/proxy \n --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \n --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \n --http-scgi-temp-path=/var/temp/nginx/scgi
-
注: 代表在命令行中换行,用于提高可读性
-
配置命令:
命令 解释 –prefix 指定nginx安装目录 –pid-path 指向nginx的pid –lock-path 锁定安装文件,防止被恶意篡改或误操作 –error-log 错误日志 –http-log-path http日志 –with-http_gzip_static_module 启用gzip模块,在线实时压缩输出数据流 –http-client-body-temp-path 设定客户端请求的临时目录 –http-proxy-temp-path 设定http代理临时目录 –http-fastcgi-temp-path 设定fastcgi临时目录 –http-uwsgi-temp-path 设定uwsgi临时目录 –http-scgi-temp-path 设定scgi临时目录
-
-
make编译
make
-
安装
make install
-
进入sbin目录启动nginx
./nginx
- 停止:./nginx -s stop
- 重新加载:./nginx -s reload
-
打开浏览器,访问虚拟机所处内网ip即可打开nginx默认页面,显示正常便表示安装成功。
注意事项:
- 如果在云服务器安装,需要开启默认的nginx端口:80
- 如果在虚拟机安装,需要关闭防火墙
- 本地win或mac需要关闭防火墙
nginx.conf 核心配置文件
-
设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为
nobody
user root;
-
worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行
worker_processes 1;
-
nginx 日志级别
debug | info | notice | warn | error | crit | alert | emerg
,错误级别从左到右越来越大 -
设置nginx进程 pid
pid logs/nginx.pid;
-
设置工作模式
events {# 默认使用epolluse epoll;# 每个worker允许连接的客户端最大连接数worker_connections 10240; }
-
http 是指令块,针对http网络传输的一些指令配置
http { }
-
include 引入外部配置,提高可读性,避免单个配置文件过大
include mime.types;
-
设定日志格式,
main
为定义的格式名称,如此 access_log 就可以直接使用这个变量了
参数名 参数意义 $remote_addr 客户端ip $remote_user 远程客户端用户名,一般为:’-’ $time_local 时间和时区 $request 请求的url以及method $status 响应状态码 $body_bytes_send 响应客户端内容字节数 $http_referer 记录用户从哪个链接跳转过来的 $http_user_agent 用户所使用的代理,一般来时都是浏览器 $http_x_forwarded_for 通过代理服务器来记录客户端的ip -
sendfile
使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush
,是指当数据表累积一定大小后才发送,提高了效率。sendfile on; tcp_nopush on;
-
keepalive_timeout
设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。
#keepalive_timeout 0;
keepalive_timeout 65;
-
gzip
启用压缩,html/js/css压缩后传输会更快gzip on;
-
server
可以在http
指令块中设置多个虚拟主机- listen 监听端口
- server_name localhost、ip、域名
- location 请求路由映射,匹配拦截
- root 请求位置
- index 首页设置
server {listen 88;server_name localhost;location / {root html;index index.html index.htm;}}
location 的匹配规则
-
空格
:默认匹配,普通匹配location / {root /home; }
-
=
:精确匹配location = /gy/img/face1.png {root /home; }
-
~*
:匹配正则表达式,不区分大小写#符合图片的显示 location ~* .(GIF|jpg|png|jpeg) {root /home; }
-
~
:匹配正则表达式,区分大小写#GIF必须大写才能匹配到 location ~ .(GIF|jpg|png|jpeg) {root /home; }
-
^~
:以某个字符路径开头location ^~ /gy/img {root /home; }
root 与 alias
假如服务器路径为:/home/gy/files/img/face.png
-
root 路径完全匹配访问
配置的时候为:location /gy {root /home }
用户访问的时候请求为:url:port/gy/files/img/face.png
-
alias 可以为你的路径做一个别名,对用户透明
配置的时候为:location /hello {alias /home/gy }
用户访问的时候请求为:
url:port/hello/files/img/face.png
,如此相当于为目录gy
做一个自定义的别名。
Nginx 日志切割-手动
现有的日志都会存在 access.log
文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员查看,所以我们可以通过把这个大的日志文件切割为多份不同的小文件作为日志,切割规则可以以天
为单位,如果每天有几百G或者几个T的日志的话,则可以按需以每半天
或者每小时
对日志切割一下。
具体步骤如下:
-
创建一个shell可执行文件:
cut_my_log.sh
,内容为:#!/bin/bash LOG_PATH="/var/log/nginx/" RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M) PID=/var/run/nginx/nginx.pid mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log#向Nginx主进程发送信号,用于重新打开日志文件 kill -USR1 `cat $PID`
-
为
cut_my_log.sh
添加可执行的权限:chmod +x cut_my_log.sh
-
测试日志切割后的结果:
./cut_my_log.sh
Nginx 日志切割-定时
使用定时任务
-
安装定时任务:
yum install crontabs
-
crontab -e
编辑并且添加一行新的任务:*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
-
重启定时任务:
service crond restart
-
附:常用定时任务命令:
service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重新载入配置 crontab -e // 编辑任务 crontab -l // 查看任务列表
定时任务表达式:
Cron表达式是,分为5或6个域,每个域代表一个含义,如下所示:
分 | 时 | 日 | 月 | 星期几 | 年(可选) | |
---|---|---|---|---|---|---|
取值范围 | 0-59 | 0-23 | 1-31 | 1-12 | 1-7 | 2019/2020/2021/… |
常用表达式:
-
每分钟执行:
*/1 * * * *
-
每日凌晨(每天晚上23:59)执行:
59 23 * * *
-
每日凌晨1点执行:
0 1 * * *
Nginx 跨域配置支持
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
Nginx 防盗链配置支持
#对源站点验证
valid_referers *.gy;
#非法引入会进入下方判断
if ($invalid_referer) {return 404;
}
upstream 指令参数 max_conns
限制每台server的连接数,用于保护避免过载,可起到限流作用。
测试参考配置如下:
# worker进程设置1个,便于测试观察成功的连接数
worker_processes 1;upstream tomcats {server 192.168.1.173:8080 max_conns=2;server 192.168.1.174:8080 max_conns=2;server 192.168.1.175:8080 max_conns=2;
}
upstream 指令参数 down、backup
down
用于标记服务节点不可用:
upstream tomcats {server 192.168.1.173:8080 down;
# server 192.168.1.190:8080;server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;
}
backup
表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到:
upstream tomcats {server 192.168.1.173:8080 backup;
# server 192.168.1.190:8080;server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;
}
注意
backup
参数不能使用在hash
和random load balancing
中。
upstream 指令参数 max_fails、fail_timeout
max_fails
:表示失败几次,则标记server已宕机,剔出上游服务。
fail_timeout
:表示失败的重试时间。
假设目前设置如下:
max_fails=2 fail_timeout=15s
则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。
Keepalived 提高吞吐量
keepalived
: 设置长连接处理的数量
proxy_http_version
:设置长连接http版本为1.1
proxy_set_header
:清除connection header 信息
upstream tomcats {
# server 192.168.1.173:8080 max_fails=2 fail_timeout=1s;server 192.168.1.190:8080;
# server 192.168.1.174:8080 weight=1;
# server 192.168.1.175:8080 weight=1;keepalive 32;
}server {listen 80;server_name www.tomcats;location / {proxy_pass http://tomcats;proxy_http_version 1.1;proxy_set_header Connection "";}}
负载均衡 ip_hash
ip_hash
可以保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。
使用ip_hash的注意点:
不能把后台服务器直接移除,只能标记down
.
If one of the servers needs to be temporarily removed, it should be marked with the down parameter in order to preserve the current hashing of client IP addresses.
upstream tomcats {ip_hash;server 192.168.1.173:8080;server 192.168.1.174:8080 down;server 192.168.1.175:8080;
}
负载均衡 url_hash 与 least_conn
根据每次请求的url地址,hash后访问到固定的服务器节点。
upstream tomcats {# url hashhash $request_uri;# 最少连接数# least_connserver 192.168.1.173:8080;server 192.168.1.174:8080;server 192.168.1.175:8080;
}server {listen 80;server_name www.tomcats;location / {proxy_pass http://tomcats;}
}
Nginx的缓存
- 浏览器缓存:
- 加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地
- Nginx缓存
- 缓存在nginx端,提升所有访问到nginx这一端的用户
- 提升访问上游(upstream)服务器的速度
- 用户访问仍然会产生请求流量
-
控制浏览器缓存:
location /files {alias /home/imooc;# expires 10s;# expires @22h30m;# expires -1h;# expires epoch;# expires off;expires max; }
Nginx的反向代理缓存
# proxy_cache_path 设置缓存目录
# keys_zone 设置共享内存以及占用空间大小
# max_size 设置缓存大小
# inactive 超过此时间则被清理
# use_temp_path 临时目录,使用后会影响nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;
location / {proxy_pass http://tomcats;# 启用缓存,和keys_zone一致proxy_cache mycache;# 针对200和304状态码缓存时间为8小时proxy_cache_valid 200 304 8h;
}
使用Nginx配置HTTPS域名证书
1. 安装SSL模块
要在nginx中配置https,就必须安装ssl模块,也就是: http_ssl_module
。
-
进入到nginx的解压目录: /home/software/nginx-1.16.1
-
新增ssl模块(原来的那些模块需要保留)
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \ --with-http_ssl_module
-
编译和安装
makemake install
2. 配置HTTPS
-
把ssl证书
*.crt
和 私钥*.key
拷贝到/usr/local/nginx/conf
目录中。 -
新增 server 监听 443 端口:
server {listen 443;server_name www.skyy;# 开启sslssl on;# 配置ssl证书ssl_certificate skyy.crt;# 配置证书秘钥ssl_certificate_key skyy.key;# ssl会话cachessl_session_cache shared:SSL:1m;# ssl会话超时时间ssl_session_timeout 5m;# 配置加密套件,写法遵循 openssl 标准ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location / {proxy_pass http://tomcats/;index index.html index.htm;}}
3. reload nginx
./nginx -s reload
Nginx全解析
Nginx全解析
什么是nginx
Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
什么是反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
简单的说就是用户请求反向代理服务器,反向代理服务器做请求分发,决定用户访问哪个服务器ip
安装Nginx与运行
-
去官网,推荐使用稳定版本
-
上传nginx到linux系统
-
安装依赖环境
(1)安装gcc环境
yum install gcc-c++
(2)安装PCRE库,用于解析正则表达式
yum install -y pcre pcre-devel
(3)zlib压缩和解压缩依赖,
yum install -y zlib zlib-devel
(4)SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
yum install -y openssl openssl-devel
-
解压,需要注意,解压后得到的是源码,源码需要编译后才能安装
tar -zxvf nginx-1.16.1.tar.gz
-
编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错
mkdir /var/temp/nginx -p
-
在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件
./configure \n --prefix=/usr/local/nginx \n --pid-path=/var/run/nginx/nginx.pid \n --lock-path=/var/lock/nginx.lock \n --error-log-path=/var/log/nginx/error.log \n --http-log-path=/var/log/nginx/access.log \n --with-http_gzip_static_module \n --http-client-body-temp-path=/var/temp/nginx/client \n --http-proxy-temp-path=/var/temp/nginx/proxy \n --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \n --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \n --http-scgi-temp-path=/var/temp/nginx/scgi
-
注: 代表在命令行中换行,用于提高可读性
-
配置命令:
命令 解释 –prefix 指定nginx安装目录 –pid-path 指向nginx的pid –lock-path 锁定安装文件,防止被恶意篡改或误操作 –error-log 错误日志 –http-log-path http日志 –with-http_gzip_static_module 启用gzip模块,在线实时压缩输出数据流 –http-client-body-temp-path 设定客户端请求的临时目录 –http-proxy-temp-path 设定http代理临时目录 –http-fastcgi-temp-path 设定fastcgi临时目录 –http-uwsgi-temp-path 设定uwsgi临时目录 –http-scgi-temp-path 设定scgi临时目录
-
-
make编译
make
-
安装
make install
-
进入sbin目录启动nginx
./nginx
- 停止:./nginx -s stop
- 重新加载:./nginx -s reload
-
打开浏览器,访问虚拟机所处内网ip即可打开nginx默认页面,显示正常便表示安装成功。
注意事项:
- 如果在云服务器安装,需要开启默认的nginx端口:80
- 如果在虚拟机安装,需要关闭防火墙
- 本地win或mac需要关闭防火墙
nginx.conf 核心配置文件
-
设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为
nobody
user root;
-
worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行
worker_processes 1;
-
nginx 日志级别
debug | info | notice | warn | error | crit | alert | emerg
,错误级别从左到右越来越大 -
设置nginx进程 pid
pid logs/nginx.pid;
-
设置工作模式
events {# 默认使用epolluse epoll;# 每个worker允许连接的客户端最大连接数worker_connections 10240; }
-
http 是指令块,针对http网络传输的一些指令配置
http { }
-
include 引入外部配置,提高可读性,避免单个配置文件过大
include mime.types;
-
设定日志格式,
main
为定义的格式名称,如此 access_log 就可以直接使用这个变量了
参数名 参数意义 $remote_addr 客户端ip $remote_user 远程客户端用户名,一般为:’-’ $time_local 时间和时区 $request 请求的url以及method $status 响应状态码 $body_bytes_send 响应客户端内容字节数 $http_referer 记录用户从哪个链接跳转过来的 $http_user_agent 用户所使用的代理,一般来时都是浏览器 $http_x_forwarded_for 通过代理服务器来记录客户端的ip -
sendfile
使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush
,是指当数据表累积一定大小后才发送,提高了效率。sendfile on; tcp_nopush on;
-
keepalive_timeout
设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。
#keepalive_timeout 0;
keepalive_timeout 65;
-
gzip
启用压缩,html/js/css压缩后传输会更快gzip on;
-
server
可以在http
指令块中设置多个虚拟主机- listen 监听端口
- server_name localhost、ip、域名
- location 请求路由映射,匹配拦截
- root 请求位置
- index 首页设置
server {listen 88;server_name localhost;location / {root html;index index.html index.htm;}}
location 的匹配规则
-
空格
:默认匹配,普通匹配location / {root /home; }
-
=
:精确匹配location = /gy/img/face1.png {root /home; }
-
~*
:匹配正则表达式,不区分大小写#符合图片的显示 location ~* .(GIF|jpg|png|jpeg) {root /home; }
-
~
:匹配正则表达式,区分大小写#GIF必须大写才能匹配到 location ~ .(GIF|jpg|png|jpeg) {root /home; }
-
^~
:以某个字符路径开头location ^~ /gy/img {root /home; }
root 与 alias
假如服务器路径为:/home/gy/files/img/face.png
-
root 路径完全匹配访问
配置的时候为:location /gy {root /home }
用户访问的时候请求为:url:port/gy/files/img/face.png
-
alias 可以为你的路径做一个别名,对用户透明
配置的时候为:location /hello {alias /home/gy }
用户访问的时候请求为:
url:port/hello/files/img/face.png
,如此相当于为目录gy
做一个自定义的别名。
Nginx 日志切割-手动
现有的日志都会存在 access.log
文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员查看,所以我们可以通过把这个大的日志文件切割为多份不同的小文件作为日志,切割规则可以以天
为单位,如果每天有几百G或者几个T的日志的话,则可以按需以每半天
或者每小时
对日志切割一下。
具体步骤如下:
-
创建一个shell可执行文件:
cut_my_log.sh
,内容为:#!/bin/bash LOG_PATH="/var/log/nginx/" RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M) PID=/var/run/nginx/nginx.pid mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log#向Nginx主进程发送信号,用于重新打开日志文件 kill -USR1 `cat $PID`
-
为
cut_my_log.sh
添加可执行的权限:chmod +x cut_my_log.sh
-
测试日志切割后的结果:
./cut_my_log.sh
Nginx 日志切割-定时
使用定时任务
-
安装定时任务:
yum install crontabs
-
crontab -e
编辑并且添加一行新的任务:*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
-
重启定时任务:
service crond restart
-
附:常用定时任务命令:
service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重新载入配置 crontab -e // 编辑任务 crontab -l // 查看任务列表
定时任务表达式:
Cron表达式是,分为5或6个域,每个域代表一个含义,如下所示:
分 | 时 | 日 | 月 | 星期几 | 年(可选) | |
---|---|---|---|---|---|---|
取值范围 | 0-59 | 0-23 | 1-31 | 1-12 | 1-7 | 2019/2020/2021/… |
常用表达式:
-
每分钟执行:
*/1 * * * *
-
每日凌晨(每天晚上23:59)执行:
59 23 * * *
-
每日凌晨1点执行:
0 1 * * *
Nginx 跨域配置支持
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
Nginx 防盗链配置支持
#对源站点验证
valid_referers *.gy;
#非法引入会进入下方判断
if ($invalid_referer) {return 404;
}
upstream 指令参数 max_conns
限制每台server的连接数,用于保护避免过载,可起到限流作用。
测试参考配置如下:
# worker进程设置1个,便于测试观察成功的连接数
worker_processes 1;upstream tomcats {server 192.168.1.173:8080 max_conns=2;server 192.168.1.174:8080 max_conns=2;server 192.168.1.175:8080 max_conns=2;
}
upstream 指令参数 down、backup
down
用于标记服务节点不可用:
upstream tomcats {server 192.168.1.173:8080 down;
# server 192.168.1.190:8080;server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;
}
backup
表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到:
upstream tomcats {server 192.168.1.173:8080 backup;
# server 192.168.1.190:8080;server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;
}
注意
backup
参数不能使用在hash
和random load balancing
中。
upstream 指令参数 max_fails、fail_timeout
max_fails
:表示失败几次,则标记server已宕机,剔出上游服务。
fail_timeout
:表示失败的重试时间。
假设目前设置如下:
max_fails=2 fail_timeout=15s
则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。
Keepalived 提高吞吐量
keepalived
: 设置长连接处理的数量
proxy_http_version
:设置长连接http版本为1.1
proxy_set_header
:清除connection header 信息
upstream tomcats {
# server 192.168.1.173:8080 max_fails=2 fail_timeout=1s;server 192.168.1.190:8080;
# server 192.168.1.174:8080 weight=1;
# server 192.168.1.175:8080 weight=1;keepalive 32;
}server {listen 80;server_name www.tomcats;location / {proxy_pass http://tomcats;proxy_http_version 1.1;proxy_set_header Connection "";}}
负载均衡 ip_hash
ip_hash
可以保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。
使用ip_hash的注意点:
不能把后台服务器直接移除,只能标记down
.
If one of the servers needs to be temporarily removed, it should be marked with the down parameter in order to preserve the current hashing of client IP addresses.
upstream tomcats {ip_hash;server 192.168.1.173:8080;server 192.168.1.174:8080 down;server 192.168.1.175:8080;
}
负载均衡 url_hash 与 least_conn
根据每次请求的url地址,hash后访问到固定的服务器节点。
upstream tomcats {# url hashhash $request_uri;# 最少连接数# least_connserver 192.168.1.173:8080;server 192.168.1.174:8080;server 192.168.1.175:8080;
}server {listen 80;server_name www.tomcats;location / {proxy_pass http://tomcats;}
}
Nginx的缓存
- 浏览器缓存:
- 加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地
- Nginx缓存
- 缓存在nginx端,提升所有访问到nginx这一端的用户
- 提升访问上游(upstream)服务器的速度
- 用户访问仍然会产生请求流量
-
控制浏览器缓存:
location /files {alias /home/imooc;# expires 10s;# expires @22h30m;# expires -1h;# expires epoch;# expires off;expires max; }
Nginx的反向代理缓存
# proxy_cache_path 设置缓存目录
# keys_zone 设置共享内存以及占用空间大小
# max_size 设置缓存大小
# inactive 超过此时间则被清理
# use_temp_path 临时目录,使用后会影响nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;
location / {proxy_pass http://tomcats;# 启用缓存,和keys_zone一致proxy_cache mycache;# 针对200和304状态码缓存时间为8小时proxy_cache_valid 200 304 8h;
}
使用Nginx配置HTTPS域名证书
1. 安装SSL模块
要在nginx中配置https,就必须安装ssl模块,也就是: http_ssl_module
。
-
进入到nginx的解压目录: /home/software/nginx-1.16.1
-
新增ssl模块(原来的那些模块需要保留)
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \ --with-http_ssl_module
-
编译和安装
makemake install
2. 配置HTTPS
-
把ssl证书
*.crt
和 私钥*.key
拷贝到/usr/local/nginx/conf
目录中。 -
新增 server 监听 443 端口:
server {listen 443;server_name www.skyy;# 开启sslssl on;# 配置ssl证书ssl_certificate skyy.crt;# 配置证书秘钥ssl_certificate_key skyy.key;# ssl会话cachessl_session_cache shared:SSL:1m;# ssl会话超时时间ssl_session_timeout 5m;# 配置加密套件,写法遵循 openssl 标准ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location / {proxy_pass http://tomcats/;index index.html index.htm;}}
3. reload nginx
./nginx -s reload
发布评论