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
默认为1
weight
越大,负载的权重就越大。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 ***.***.***.***:***;
}
}