https://www.g2022cyk.top/archives/nginx%E4%B8%8B%E7%9A%84%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86
最近正在开发项目,即用到了Java的Spring Boot,又用到了Python的Flask,为了保证在同一域名下访问,我使用了Nginx做反向代理,只代理一个还比较好配置,代理的多了各种接口疯狂报错。为了防止以后再踩坑,写下这篇博客来记录最正确的配置。
使用SpringBoot开发的应用,指向域名的根目录,代理地址http://127.0.0.1:9000。
location /
{
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
}
如果只有一个应用的话可以这样写,只会代理如下格式文件。
location ~* \.(gif|png|jpg|css|js|woff|woff2)$
{
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
expires 12h;
}
这个是使用Flask开发的应用,指向/query
目录,代理地址http://127.0.0.1:9099。
location ^~ /query
{
proxy_pass http://127.0.0.1:9099;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
}
前面的^~
一定要写,不然它只能指向代理地址的第一层路径,剩下其他的就全执行不了了。
这个没有什么好说的,设定好目录之后会自动指向index文件。
location /app
{
alias /www/your-path/app;
}
你要硬说有坑的话,那就参见alias和root区别。
虽然前面已经引用过根目录了,但是static
目录并没有被引用,访问的话会直接指向第一个代理程序,所以我们还需要再引用一次。
location ^~ /app/static/
{
alias /www/your-path/app/assets/;
}
前面的^~
一定要写,不然访问文件疯狂404。
前两种写法虽然能用,但是写了两个总感觉有些多余,本身前端静态文件和静待文件就是在一起的,我们把它合并成一个。
location ^~ /app/
{
alias /www/your-path/app/;
}
指定目录后面加上/
就可以直接引导到整个文件夹。
如果你怕一个服务宕机,想拥有更稳定的服务,你可以同时在两个服务器上部署应用,然后使用Nginx做负载均衡。
upstream fzjh
{
server 127.0.0.1:5000 weight=2;
server 127.0.0.1:5000 weight=1;
}
location /
{
proxy_pass http://fzjh;
proxy_set_header Host zxwS;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
}
weight
代表权重,理论上权重越高,被分配到该服务器的几率越大。
在Nginx服务器上存储一份静态资源,使用下面这行代码引导。
location ~* \.(gif|png|jpg|css|js|woff|woff2)$
{
root /www/your-path/static;
}
location /static/
{
alias /www/your-path/static/;
}
此时Nginx会自动去/www/your-path/static/
目录找文件
location /static/
{
root /www/your-path/static/;
}
此时Nginx会自动去/www/your-path/static/static/
目录找文件,等于说多了一层