如何使用uwsgi对同一nginx服务器上不同位置的不同烧瓶应用程序执行url重写?

时间:2014-11-18 14:07:44

标签: python regex nginx url-rewriting uwsgi

我面临以下问题: 我已经设置了nginx来监听在不同端口上运行uwsgi的两个不同的上游应用服务器。这两个应用程序使用相同的静态文件,但根据nginx位置,第一个应用程序或第二个应用程序被加载:

server {
    listen      80;
    server_name localhost;
    charset     utf-8;
    client_max_body_size 75M;

# Proxy connections to the application servers
        # app_servers
        location /firstapplication {


            include       /etc/nginx/mime.types;
            proxy_pass         http://app_servers_firstapplication/;
            proxy_redirect     off;
            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   X-Forwarded-Host $server_name;

            rewrite /?(?!/firstapplication)/(.+) /firstapplication/$1 last;
        }

        location /secondapplication {

            include       /etc/nginx/mime.types;
            proxy_pass         http://secondapplication/;
            proxy_redirect     off;
            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   X-Forwarded-Host $server_name;

            rewrite /?(?!/secondapplication)/(.+) /secondapplication/$1 last;      
        }
     location ^~ /scripts/  {
            alias /webapps/scripts/;

        }

     location ^~ /css/  {
            alias /webapps/html/css/;
        }
     location ^~ /graphics/  {
            alias /webapps/html/graphics/;

        }    
     location ^~ /fonts/  {
            alias /webapps/html/fonts/;

        }

}

当我调用mydomain / firstapplication或mydomain / secondapplication时,相应应用程序的初始页面会被正确加载。

但是当应用程序的初始页面被加载并且我点击应用程序中的链接时,它正在使用应用程序的网址,例如/ contact而不是/ firstapplication / contact,因此我对于我调用的每个网址都会出现404错误应用程序。

我想在nginx中使用特定于位置的重写来解决这个问题,如下所示:

rewrite /?(?!/firstapplication)/(.+) /firstapplication/$1 last;

rewrite /?(?!/secondapplication)/(.+) /secondapplication/$1 last;

当我加载页面/第一个应用程序时,我使用负向lookbehind断言来避免循环重定向。 这个重写正则表达式应该工作我在这个在线编辑器中测试它:http://regex101.com/r/yH7sP0/1

不幸的是,nginx不会重定向应用程序网址,但仍然会导致404错误。

我可以使用nginx重写模块来实现我的目标吗?或者我可以使用其他方法在同一个nginx服务器上运行两个不同的应用程序?

0 个答案:

没有答案