nginx通配符 / 无法将路由转发到服务器端口
server {
listen 443 ssl;
server_name www.xxx.xxx.pro;
ssl_certificate cert/5862364_www.xxx.xxx.pro.pem;
ssl_certificate_key cert/5862364_www.xxx.xxx.pro.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:14856/;
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_redirect off;
try_files $uri $uri/ =404;
}
}
nginx是这样配置的,拿其中一个get接口请求为例:www.xxx.xxx.pro/todo/find
,返回404,而我用curl http://127.0.0.1:14856/todo/find
在服务器上请求是有返回的。
并且我将proxy_pass http://127.0.0.1:14856/
改成proxy_pass http://127.0.0.1:14856/todo/find
,前端直接用www.xxx.xxx.pro
访问到了/todo/find
这个接口。
我自己理解的应该是nginx把我所有的请求都请求到http://127.0.0.1:14856
上了,后面并没有路由,所以才会404的,我现在整个服务只提供接口,所以用通配符 / 应该没毛病吧?求大神支招!
【补充】以上前端请求都是用的https
【补充】尝试使用
rewrite ^/api/(.*?) /$1 break;
proxy_pass http://127.0.0.1:14856;
也是一样,不同的是404是这样返回的:
而之前的404是这样的:
【补充】日志:
【补充】查看error.log发现问题在哪了,但是不知道问题产生的原因:
【解决】:
猜测的原因是location
中的try_files $uri $uri/ =404;
这个配置把我的请求当成访问静态资源了,所以才会出现错误日志中的情况,注释掉之后接口可以正常访问了。
也只是猜测,有明白的大佬可以指点一二。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
listen 443
是不是前端没写 https 请求到 80 了?
你把
proxy_pass http://127.0.0.1:14856/;
最后那个/
去掉试试。改成
proxy_pass http://127.0.0.1:14856;
nginx 之 proxy_pass详解 【简书】
http://nginx.org/en/docs/http...
proxy_pass 指令后带pathinfo和不带pathinfo处理方式不同. 试着把
/
去掉看看