使用location指令和proxy_pass进行NGINX意外行为

时间:2017-07-25 08:05:32

标签: nginx reverse-proxy nginx-location

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

静态 - > http://localhost:8080

dev webserver - > http://localhost:8080/dev

我还有其他一些服务可以绑定到不同的位置指令。

这是剪辑配置文件。

...
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都会导致静态文件。

对我来说一切看起来都不错,但确实有些事情不行。

Basic_Auth会产生另一种意外行为。

所以,目前我对如何解决这个问题有点无能为力。

2 个答案:

答案 0 :(得分:1)

请从您的位置指令中删除跟踪import React, { Component } from 'react'; import { Text, } from 'react-native'; export default class StartScreen extends Component { constructor(props) { super(props); } render() { return ( <Text style={{color: '#F00'}}>TEST</Text> ); } } ,或在访问时提供/

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

/apex的文档是here

答案 1 :(得分:0)

我现在尝试了几件事,但没有真正奏效。所以我决定为所有位置指令创建第二个服务器块,这对我当前的设置有问题。

可能这不是最佳解决方案,因为我仍然不知道为什么会遇到这些问题。但它现在有效,对我来说很重要。