一、nginx配置
server {
listen 80;
listen 12000;
server_name www.test.com;
# 设置上传文件大小,0表示不限制
client_max_body_size 0;
# app站点
location /api {
proxy_pass http://127.0.0.1:11118/;
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 HTTP_X_FORWARDED_FOR $remote_addr;
proxy_redirect off;
}
# 虚拟目录
location /fui {
proxy_pass http://192.168.1.69:10082/;
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 HTTP_X_FORWARDED_FOR $remote_addr;
proxy_redirect off;
}
# 虚拟静态目录
location /html {
add_header 'Access-Control-Allow-Origin' '*';
proxy_pass http://localhost:10000/;
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 HTTP_X_FORWARDED_FOR $remote_addr;
proxy_redirect off;
}
#设置拦截跳转域名,拦截/v1/代理到 http://asp.xxx.com 域名下
location /v1/ {
proxy_pass http://asp.gehouse.cn;
proxy_redirect off;
#proxy_set_header Host $host;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
root /usr/local/server/front;
index index.html index.htm;
}
}
引入多个配置文件
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
gzip on;
keepalive_timeout 5000;
# 引入多个配置文件,当前目录conf.d下所有配置
include conf.d/*.conf;
}
二、添加域名拦截的时候
proxy_pass http://asp.xxx.com;
不用设置 proxy_set_header Host $host; ,否则拦截报错404
使用域名代理 需要设置 proxy_set_header Host $proxy_host; 或者不添加这个
在使用Nginx做反向代理的时候,proxy_set_header功能可以设置反向代理后的http header中的host,
那么常用的几个设置中$proxy_host, $host,$http_host又都表示什么意思呢?
Nginx的官网文档中说下面这两条是做反代时默认的,所以$proxy_host 自然是 proxy_pass后面跟着的host了
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
如果客户端发过来的请求的header中有’HOST’这个字段时,
$http_host和$host都是原始的’HOST’字段
比如请求的时候HOST的值是www.csdn.net 那么反代后还是www.csdn.net
如果客户端发过来的请求的header中没有有’HOST’这个字段时,
建议使用$host,这表示请求中的server name。
三、proxy_pass URL末尾加与不加/(斜线)的区别
1、proxy_pass 路径后面添加 “/” 则表示 location 拦截的路径前缀后面部分会被添加到 proxy_pass url后面
location /v1/ {
proxy_pass http://192.168.1.69:10082/;
}
#当访问url: www.test.com/v1/
#被代理到 http://192.168.1.69:10082/
#当访问url: www.test.com/v1/bdm/index
#被代理到 http://192.168.1.69:10082/bdm/index
proxy_pass 路径后面添加 “/” 则表示 location 拦截的路径前缀后面部分会被添加到 proxy_pass url后面
2、proxy_pass 路径后面不添加 “/” 则表示 location 拦截的路径全部会被添加到 proxy_pass url后面
location /v1/ {
proxy_pass http://192.168.1.69:10082;
}
#当访问url: www.test.com/v1/
#被代理到 http://192.168.1.69:10082/v1/
#当访问url: www.test.com/v1/bdm/index
#被代理到 http://192.168.1.69:10082/v1/bdm/index
proxy_pass 路径后面不添加 “/” 则表示 location 拦截的路径全部会被添加到 proxy_pass url后面
四、配置nginx上传文件大小
设置上传文件大小,0表示不限制
client_max_body_size 0;
client_max_body_size 10m;
如果不配置,请求会报:413 Request Entity Too Large
配置1:放http中
http {
....
client_max_body_size 10m;
....
}
配置2:放server 配置中
server {
listen 8888;
server_name localhost;
# 设置上传文件大小,0表示不限制
client_max_body_size 0;
# app站点
location /api/ {
proxy_pass http://127.0.0.1:8740/;
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 HTTP_X_FORWARDED_FOR $remote_addr;
proxy_redirect off;
}
# CNKI接口
location /cnki-api/ {
proxy_pass https://xztg.cnki.net/;
proxy_set_header Host xztg.cnki.net;
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;
}
location / {
root /usr/local/server/front;
index index.html index.htm;
}
}