Eu tenho um aplicativo de catalisador perl que estou montando em um URL específico (vs montagem em um subdomínio) e estou tendo problemas para definir SCRIPT_NAME na solicitação para o back-end. Isso afeta os URLs gerados pelo aplicativo. Ele precisa saber onde está montado para poder gerar as URLs corretamente.
Então minha cadeia é:
request = > [nginx, proxy_pass] = > [starman: 5000] = > [perl_app]
Quando o proxy_pass envia o pedido para o starman, estou esperando que ele defina SCRIPT_NAME
. Se eu estivesse usando fastcgi, faria fastcgi_param SCRIPT_NAME something
ou usaria fastcgi_split_path_info
. Neste ponto, estou pronto para virar para o fastcgi, mas sou teimoso e quero descobrir se isso é possível. Eu tentei configurar o fastcgi_params de qualquer maneira só para ver se isso afetaria o SCRIPT_NAME
enviado com o proxy_pass, mas não tanto quanto eu posso dizer.
minha configuração do servidor nginx:
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default ipv6only=on; ## listen for ipv6
root /usr/share/nginx/default;
index index.html;
server_name www.example.com example.com;
listen 80 default_server;
listen 443 ssl;
ssl_certificate certs/cert.pem;
ssl_certificate_key certs/key.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ =404;
}
location /ff/ {
if ( $https = "off" ) {
return 302 https://$server_name$request_uri;
}
#fastcgi_split_path_info (.*)(.*);
#include fastcgi_params;
#fastcgi_param PATH_INFO /blah;
#fastcgi_param SCRIPT_NAME /test;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_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-Port $server_port;
#fastcgi_pass localhost:5000;
proxy_pass http://localhost:5000/;
}
error_page 404 /errors/404.html;
error_page 500 502 503 504 /errors/50x.html;
}
Portanto, o aplicativo está em example.com/ff
e o deve redirecionar para example.com/ff/login
se você tentar ir para example.com/ff/home
sem estar logado. Em vez disso, quando você faz uma solicitação para example.com/ff/home
PATH_INFO é definido como / home (conforme esperado) e SCRIPT_NAME
é '', portanto, o aplicativo gera um redirecionamento para example.com/home
em vez de example.com/ff/home
Até onde eu encontrei, minhas únicas soluções são:
- use fastcgi
- faça algo no aplicativo catalisador para informar onde ele está montado (como ler um cabeçalho de solicitação http para saber onde ele está montado e, em seguida, o código de geração uri pode criar o caminho correto)
Obrigado por qualquer ideia.