Nginx 笔记
指令
Nginx 重新读取配置的命令 nginx -s reload
gzip 压缩
nginx
http {
gzip on;
gzip_types application/javascript application/json text/css text/xml font/woff;
gzip_disable "MSIE [1-6]\.";
}location
语法规则: location [=|~|~*|^~] /uri/ { ... }
= 开头表示精确匹配
^~ 开头表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配的正则
/ 通用匹配,任何请求都会匹配到。
nginx 反向代理
nginx
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
root /usr/share/nginx/html;
ssl_certificate "/root/ssl/xxx.pem";
ssl_certificate_key "/root/ssl/xxx.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
## Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /carwechat/ {
proxy_pass http://192.168.1.5:3002/carwechat/;
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Real-IP $remote_addr;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}nginx 权重分配
weight
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。
nginx
upstream backend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
nginx
upstream backend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
nginx
upstream backend {
server server1.linuxany.com;
server server2.linuxany.com;
fair;
}url_hash(第三方)
按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,后端服务器为缓存时比较有效。 例:在 upstream 中加入 hash 语句,server 语句中不能写入 weight 等其他的参数,hash_method 是使用的 hash 算法。
nginx
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
#定义负载均衡设备的Ip及设备状态
upstream backend{
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}在需要使用负载均衡的 server 中增加 proxy_pass http://bakend/;
每个设备的状态设置为:
down表示单前的server暂时不参与负载weight默认为1weight越大,负载的权重就越大。max_fails:允许请求失败的次数默认为1当超过最大次数时,返回proxy_next_upstream模块定义的错误fail_timeout:max_fails次失败后,暂停的时间。backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx 正向代理
nginx 不仅可以来做反向代理,也可以用来做正向代理(透明代理,代理上网)
nginx
http {
resolver 8.8.8.8;
server {
listen 8088;
location / {
proxy_pass http://$http_host$request_uri;
}
}
}nginx 实现代理上网,有三个关键点必须注意,其余的配置跟普通的 nginx 一样
- 增加
dns解析resolver - 增加无
server_name名的server proxy_pass指令
HTTP 强制转 HTTPS
使用 497 状态
497 - normal request was sent to HTTPS
解释:当网站只允许 https 访问时,当用 http 访问时 nginx 会报出 497 错误码。
思路:
利用 error_page 命令将 497 状态码的链接重定向到 https://demo.com 这个域名上。
配置方式:
nginx
server {
listen 443 ssl; ## ssl 端口
listen 80; ## 用户习惯用 http 访问,加上80,后面通过 497 状态码让它自动跳到 443 端口
server_name demo.com;
ssl on;
## 指定 PEM 格式的证书文件
ssl_certificate /etc/nginx/certificate.pem;
## 指定 PEM 格式的私钥文件
ssl_certificate_key /etc/nginx/certificate.key;
## 让 http 请求重定向到 https 请求
error_page 497 https://$host$uri?$args;
gzip on;
gzip_buffers 32 4k;
gzip_comp_level 6;
gzip_min_length 200;
gzip_types text/css text/xml application/javascript;
gzip_vary on;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://localhost:2368;
}
}使用 rewrite
nginx
server {
listen 80;
server_name _;
rewrite ^(.*)$ https://$host$1 permanent;
}开启 Nginx 文件目录页面
打开 nginx.conf 文件,在 location server 或 http 段中加入 autoindex on;
另外两个参数最好也加上去:autoindex_exact_size on;
显示出文件的确切大小,单位是 bytes。
改为 off 后,显示出文件的大概大小,单位是 kB 或者 MB 或者 GB
autoindex_localtime on;
默认为 off,显示的文件时间为 GMT 时间。
改为 on 后,显示的文件时间为文件的服务器时间
配置 Nginx 目录列表的方法详细参照:这个
配置示例:
nginx
location /upload {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
alias F:\\PHP\\upload;
}nginx stream 代理数据库链接
这个特性应该是 1.14.2 版本新增的
nginx
stream {
## mysql
server {
listen 4000; //本地请求端口
proxy_pass ***.***.***.***:***; //转发到服务器的地址
}
## redis
server {
listen 4001;
proxy_pass ***.***.***.***:***;
}
## mongdb
server {
listen 4002;
proxy_pass ***.***.***.***:***;
}
}