首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用位置指令和proxy_pass的NGINX意外行为

使用位置指令和proxy_pass的NGINX意外行为
EN

Stack Overflow用户
提问于 2017-07-25 08:05:31
回答 2查看 353关注 0票数 0

我有一个NGINX配置文件,可以通过开发服务器和静态文件为网站提供服务。

静态-> http://localhost:8080

开发dev服务器-> http://localhost:8080/dev

还有几个其他服务,我绑定到不同的位置指令。

下面是配置文件的一个片段。

代码语言:javascript
复制
...
upstream qgis {
   server qgis-spcluster_server:80;
}
...    
server {
    listen       8080;
    server_name  localhost;

location / {
    root   /usr/share/nginx/html/build;
    index  index.html index.htm;

    auth_basic "Zugangskontrolle";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

location /dev/ {
    proxy_pass http://web_app/;

    auth_basic "Zugangskontrolle";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

location /static/ {
    proxy_pass http://web_app/static/;
}

location /qgis/ {
    proxy_pass http://qgis/;
}

location /apex/ {
    proxy_pass http://apex/apex/;
    auth_basic "off";
}

...

在打开URL以获取静态文件之前,所有操作都与预期的一样。之后,所有其他URL都会导致静态文件。

  • http://localhost:8080/apex ->高峰服务
  • http://localhost:8080 ->静态网站
  • http://localhost:8080/apex ->静态网站

对我来说,一切看起来都很好,但确实有些不对劲。

Basic_Auth会产生另一个意想不到的行为。

  • http://localhost:8080 -> basic auth -> success ->静态网站
  • http://localhost:8080/apex -> basic auth ->不可能消除弹出

所以现在我有点不知道如何解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-25 12:33:21

我现在试了好几件事,但都没什么好用的。因此,我决定为所有位置指令创建第二个服务器块,这些指令在我当前的设置中存在问题。

也许这不是最好的解决方案,因为我仍然不知道为什么我会遇到这些问题。但现在起作用了,这对我来说很重要。

票数 0
EN

Stack Overflow用户

发布于 2017-07-25 08:40:00

请从您的位置指令中删除尾随的/,或者在访问它们时提供/

Nginx寻找最长的前缀匹配位置。当您访问http://localhost:8080/apex时,它被路由到/,因为/apex/不是/apex的前缀

location的文档是这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45297394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档