Proxy reverso Nginx com aliases separados

1

Pergunta interessante Eu tenho este código python:

import sys, bottle, gevent
from bottle import *
from gevent import *
from gevent.wsgi import WSGIServer

@route("/")
def index():
    yield "/"

application=bottle.default_app()
WSGIServer(('', port), application, spawn=None).serve_forever()

que é executado de forma independente com o nignx em frente a ele como um proxy reverso.
Agora cada um desses pedaços de código são executados separadamente, mas eu executo vários deles por domínio por projeto (diretório), mas o código pensa, por algum motivo, que ele é de nível superior e não é assim quando você acessa mydomain.com/something ele funciona, mas Se você for para mydomain.com/something/, você receberá um erro. Não, eu testei e descobri que o nginx está removendo o "algo" da solicitação / consulta, de modo que quando você vai para mydomain.com/something/ o código pensa que você está indo para mydomain.com// como faço para obter o nginx parar de remover essa informação?

Código do site Nginx:

upstream mydomain {
        server 127.0.0.1:10100 max_fails=5 fail_timeout=10s;
}
upstream subdirectory {
        server 127.0.0.1:10199 max_fails=5 fail_timeout=10s;
}

server {
        listen 80;
        server_name mydomain.com;
        access_log /var/log/nginx/access.log;
        location /sub {
                proxy_pass http://subdirectory/;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_max_temp_file_size 0;
                client_max_body_size 10m;
                client_body_buffer_size 128k;

                proxy_connect_timeout 90;
                proxy_send_timeout 90;
                proxy_read_timeout 90;

                proxy_buffer_size 4k;
                proxy_buffers 4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;
        }
        location /subdir {
                proxy_pass http://subdirectory/;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_max_temp_file_size 0;
                client_max_body_size 10m;
                client_body_buffer_size 128k;

                proxy_connect_timeout 90;
                proxy_send_timeout 90;
                proxy_read_timeout 90;

                proxy_buffer_size 4k;
                proxy_buffers 4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;
        }
}
    
por gabeio 24.06.2012 / 10:08

1 resposta

1

Eu descobri:]

aparentemente no proxy_pass você precisa dizer ao subdiretório que a solicitação será:

location /sub {
            proxy_pass http://subdirectory/sub; // here the location ie: /sub needs to be passed to the underlieing 
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_max_temp_file_size 0;
            client_max_body_size 10m;
            client_body_buffer_size 128k;

            proxy_connect_timeout 90;
            proxy_send_timeout 90;
            proxy_read_timeout 90;

            proxy_buffer_size 4k;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
}
    
por 24.06.2012 / 19:44