场景:SpringBoot+Vue前后端分离,用Nginx做反向代理。
一、Nginx.conf
#定义Nginx运行的用户和用户组
user root;
#进行增大并发连接数的处理 跟cpu保持一致 八核设置八个
worker_processes 1;
#nginx的错误日志路径
error_log /var/log/nginx/error.log warn;
#nginx服务启动时候pid 进程ID
pid /var/run/nginx.pid;
#定义事件相关的属性
events {
#一个进程允许处理的最大连接数
worker_connections 1024;
}
http {
# 文件扩展名与文件类型映射表(支持的文件类型)
include /etc/nginx/mime.types;
# 默认文件类型
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 请求日志
access_log /var/log/nginx/access.log main;
# 开启高效文件传输模式。
sendfile on;
# 防止网络阻塞
#tcp_nopush on;
# 长连接超时时间,单位是秒
keepalive_timeout 65;
# 开启gzip压缩输出
#gzip on;
# 导入server配置文件
include /etc/nginx/conf.d/*.conf;
}
二、server配置文件样例
1、a.conf
server {
# 需要被监听的端口号,前提是此端口号没有被占用,否则在重启 Nginx 时会报错
listen 9500;
# 域名可以有多个,用空格隔开
server_name localhost;
# 上述端口指向的根目录
root /u01/a/a1/a-web/dist;
# 项目根目录中指向项目首页
index index.html;
#client_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,
#在“Content-Length”请求头中指定。
#如果请求的正文数据大于client_max_body_size,
#HTTP协议会报错 413 Request Entity Too Large。
#就是说如果请求的正文大于client_max_body_size,一定是失败的。
#如果需要上传大文件,一定要修改该值。
client_max_body_size 20m;
#Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size
#直接将数据先在内存中存储。
#如果请求的值大于client_body_buffer_size小于client_max_body_size,
#就会将数据先存储到临时文件中,在哪个临时文件中呢?
#client_body_temp 指定的路径中,默认该路径值是/tmp/.
#所以配置的client_body_temp地址,一定让执行的Nginx的用户组有读写权限。
#否则,当传输的数据大于client_body_buffer_size,写进临时文件失败会报错。
client_body_buffer_size 128k;
#传输的数据大于client_max_body_size,一定是传不成功的。
#小于client_body_buffer_size直接在内存中高效存储。
#如果大于client_body_buffer_size小于client_max_body_size会存储临时文件,
#临时文件一定要有权限。
#如果追求效率,就设置 client_max_body_size client_body_buffer_size相同的值,
#这样就不会存储临时文件,直接存储在内存了。
# 访问控制
# 根请求会指向的页面
location / {
# 配合@使用, 如果能找到指定的uri那么就返回相应的内容,
#否则的话就内部重定向到后端名称为@backup的location
# 此处的 @router 实际上是引用下面的转发,否则在 Vue 路由刷新时可能会抛出 404
try_files $uri $uri/ @router;
# 请求指向的首页
index index.html;
# 返回nginx的状态
#stub_status on ;
# 允许的访问地址
#allow 192.168.*.**;
# 默认禁止所有访问,除了允许的
#deny all;
}
# 由于路由的资源不一定是真实的路径,无法找到具体文件
# 所以需要将请求重写到 index.html 中,然后交给真正的 Vue 路由处理请求资源
location @router {
rewrite ^.*$ /index.html last;
}
# 目录列表(API控制)
location /api/ {
# 后端的真实接口 反向代理
proxy_pass http://192.168.*.**:5002/api/;
# 重定向 关
proxy_redirect off;
#反向代理设置 proxy_set_header是用来设置请求头的,设置了请求头后,
#后端服务器就可以获取到这些变量值。
#proxy_set_header Host $host; $host就是nginx代理服务器,
#也就是windows客户端请求的host
#$host代表转发服务器,$proxy_port代表转发服务器请求后端服务器的端口
proxy_set_header Host $host;
#将$remote_addr的值放进变量X-Real-IP中,此变量名可变,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
#封装报文
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Cookie $http_cookie;
# for Ajax
#fastcgi_param HTTP_X_REQUESTED_WITH $http_x_requested_with;
proxy_set_header HTTP-X-REQUESTED-WITH $http_x_requested_with;
proxy_set_header HTTP_X_REQUESTED_WITH $http_x_requested_with;
proxy_set_header x-requested-with $http_x_requested_with;
#限制请求体的大小,若超过所设定的大小,返回413错误。
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数,
client_body_buffer_size 128k;
#http请求无法立即被容器(tomcat, netty等)处理,被放在nginx的待处理池中等待被处理。
#此参数为等待的最长时间,默认为60秒,官方推荐最长不要超过75秒。
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 1000;
#http请求被服务器处理完后,把数据传返回给Nginx的用时,默认60秒。
#后端服务器数据回传时间(代理发送超时)
proxy_send_timeout 1000;
#http请求被容器(tomcat, netty等)处理后,nginx会等待处理结果,
#也就是容器返回的response。
#此参数即为服务器响应时间,默认60秒。
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 1000;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 128k;
#proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_buffers 32 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 128k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 128k;
}
}
2、同模式其他文件,不同listen端口,不同root;
三、nginx.pid
#指定进程id
12597
四、mime.types
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
五、反向代理可选参数
#以下是一些反向代理的配置,可选.
location / {
proxy_pass http://****;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
六、其他
1、参考 proxy_set_header:Nginx反向代理中proxy_set_header参数说明