文章目录
- 一、Nginx介绍
- 1. 简介
- 2. 相关网站
- 3. 配置文件
- 二、location说明
- 1. 匹配规则
- 2. 替换匹配部分
- 三、Nginx代理
- 1. Spring服务代理
- 2. MySQL代理
- 3. MinIO代理
一、Nginx介绍
1. 简介
Nginx(读作“engine x”)是一个高性能的开源HTTP和反向代理服务器。
高性能:可以处理大量的并发连接,并且具有响应速度快、资源消耗低的优点。
反向代理:可以作为反向代理服务器,负载均衡、动态内容缓存。
静态内容服务:可以快速地提供静态网页、图像、视频等静态内容的传输。
HTTP缓存:可以配置HTTP缓存策略,缓存静态内容和动态内容的响应,减轻后端服务器的负载。
安全性:具有安全性强的特点,可以进行安全的通信,支持SSL/TLS协议和HTTPS的加密连接。
2. 相关网站
Nginx官方下载
3. 配置文件
worker_processes auto; # 开启业务进程数, 建议设置为CPU总核心数
worker_rlimit_nofile 51200; # 打开文件数的总和events{use epoll; # 使用epoll模型worker_connections 51200; # 客户端最大连接数multi_accept on; # 同时接受多个连接请求}http{include mime.types; # 引入http mime类型default_type application/octet-stream; # 默认文件类型client_header_buffer_size 32k; # 接收用户请求中HTTP header部分时分配的内存buffer大小large_client_header_buffers 4 32k; # 请求中的HTTP header超过client_header_buffer_size时生效client_max_body_size 500m; # 允许客户端请求的最大单文件字节数client_body_buffer_size 512k; # 缓冲用户端请求的最大字节数proxy_connect_timeout 300; # 和后端服务器连接超时时间proxy_read_timeout 300; # 连接成功后, 后端服务器响应超时时间proxy_send_timeout 300; # 后端服务器数据回传超时时间proxy_buffer_size 32k; # 保存用户头信息的缓冲区大小proxy_buffers 4 64k; # proxy_buffers缓冲区proxy_busy_buffers_size 128k; # 高负荷下缓冲大小(proxy_buffers*2)proxy_temp_file_write_size 128k; # 缓存文件夹大小# 当其中一台返回错误码时, 可以分配到下一台服务器程序继续处理proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; # 111# 限制并发连接数以及下载带宽limit_conn_zone $binary_remote_addr zone=perip:10m;limit_conn_zone $server_name zone=perserver:10m;sendfile on; # 开启高效文件传输模式tcp_nopush on; # 防止网络阻塞tcp_nodelay on; # 防止网络阻塞keepalive_timeout 300; # 客户端连接保持活动的超时时间# FastCGI配置, 改善网站的性能fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 256k;fastcgi_intercept_errors on;# gzip压缩配置gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.1;gzip_comp_level 2;gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;gzip_vary on;gzip_proxied expired no-cache no-store private auth;gzip_disable "MSIE [1-6]\.";# 虚拟主机, 可以配置多个server{listen 8080; # Nginx监听端口号# 设置静态内容服务location / {alias /usr/share/nginx/html/;}# 设置反向代理location /test/base/api/ {proxy_pass http://127.0.0.1:8002/base/api/;}# 设置Nginx状态模块location /nginx_status {stub_status on;access_log off;allow 127.0.0.1;deny all;}# 未匹配uri禁止访问location ~ /\.{deny all;}}
}
二、location说明
1. 匹配规则
语法 | 匹配规则 | 优先级 |
---|---|---|
= | 精确匹配uri完整路径, 如果匹配成功,则立即处理请求 | 1 |
^~ | 前缀匹配,会匹配表达式最长的那个 | 2 |
~ | 区分大小写的正则匹配, 如果匹配成功,则立即处理请求 | 3 |
~* | 不区分大小写的正则匹配, 如果匹配成功,则立即处理请求 | 3 |
不带修饰符匹配,会匹配表达式最长的那个 | 4 | |
/ | 通用匹配 | 5 |
location /a/b/ { # 规则1return 101;
}
location = /a/b/ { # 规则2return 102;
}
location ^~ /a/b/c/ { # 规则3return 103;
}
location ^~ /a/b/c/d/ { # 规则4return 104;
}
location ~ /a/b/ { # 规则5return 105;
}
location ~* /a/b/ { # 规则6return 106;
}
location /b/c/ { # 规则7return 107;
}
location /b/ { # 规则8return 108;
}
location / { # 规则9return 109;
}# 精确匹配,返回状态码 102
curl -I http://127.0.0.1:8080/a/b/
# 前缀匹配,返回状态码 103
curl -I http://127.0.0.1:8080/a/b/c/d?e=1
# 前缀匹配,返回状态码 104
curl -I http://127.0.0.1:8080/a/b/c/d/e?f=1
# 区分大小写正则匹配,返回状态码 105
curl -I http://127.0.0.1:8080/a/b/c?d=1
# 不区分大小写正则匹配,返回状态码 106
curl -I http://127.0.0.1:8080/a/B/c?d=1
# 不带修饰符匹配,返回状态码 107
curl -I http://127.0.0.1:8080/b/c/d?e=1
# 不带修饰符匹配,返回状态码 108
curl -I http://127.0.0.1:8080/b/c?d=1
# 通用匹配,返回状态码 109
curl -I http://127.0.0.1:8080/b?d=1
2. 替换匹配部分
语法 | 说明 |
---|---|
proxy_pass不带/ | 把请求的path拼接到proxy_pass之后 |
proxy_pass带/ | 匹配成功的部分剪切掉后再拼接到proxy_pass之后 |
# 访问地址:http://127.0.0.1:8080/test/api
location /test/api {proxy_pass http://127.0.0.1:8080;
}# 访问地址:http://127.0.0.1:8080/api/
location /test/api/ {proxy_pass http://127.0.0.1:8080/api/;
}
三、Nginx代理
1. Spring服务代理
# 前端静态内容
location /test/spring/ {alias /usr/share/nginx/html/spring/;
}# 后端接口反向代理
location /test/spring/api/ {proxy_pass http://127.0.0.1:8080/spring/api/;# nginx转发时保留原始请求域名信息proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
2. MySQL代理
stream标签和http同级
stream{allow 192.168.1.12;deny all;server{listen 3306;proxy_pass 192.168.1.11:3306;}}
3. MinIO代理
location /test/minio/ {proxy_pass http://192.168.1.11:9000/; proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 300;proxy_http_version 1.1;proxy_set_header Connection "";chunked_transfer_encoding off;
}