我想使用nginx来提供一些静态文件,并将Restful api反向代理到后端。 我用docker包裹了它们。
以下是我的配置文件/etc/nginx/conf.d/default.conf
。
server {
listen 80;
# gzip config
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
root /usr/share/nginx/html;
location / {
try_files $uri $uri/ /index.html @backend;
error_page 405 @backend;
}
location /terminal {
proxy_pass http://dns-management-backend:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
location @backend {
proxy_pass http://dns-management-backend:8080;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
静态文件可以正常显示,但是宁静的api返回405 Not Allowed
。
以下是nginx的日志
192.168.16.2 - - [19/Sep/2019:02:59:38 +0000] "POST /sys/login HTTP/1.1" 405 796 "http://dns-management.api.my.domain/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "113.55.15.1"
答案 0 :(得分:0)
最后,我找到了原因,这是错误地使用了try_files
指令,如果请求url为POST /sys/login
,则将提供POST /index.html
。因此出现405不允许。
修复很简单,将try_files
指令更改为try_files $uri $uri/index.html @backend;