У меня есть приложение катализатора жемчуга, которое я монтирую на определенном URL (по сравнению с монтированием на субдомене) и имею установку SCRIPT_NAME задач по запросу к бэкенду. Это влияет на URL, сгенерированные приложением. Это должно знать, где это смонтировано так, чтобы это могло правильно генерировать URL.
Таким образом, моя цепочка:
запросите => [nginx, proxy_pass] => [starman:5000] => [perl_app]
Когда proxy_pass отправит запрос астрологу, я ожидаю, что это установит SCRIPT_NAME
. Если бы я использовал fastcgi, то я сделал бы fastcgi_param SCRIPT_NAME something
или используйте fastcgi_split_path_info
. В этой точке я готов просто перевернуть к fastcgi, но я упрям и хочу выяснить, возможно ли это. Я попытался установить fastcgi_params так или иначе только, чтобы видеть, влиял ли он SCRIPT_NAME
отправленный с proxy_pass, но это не делает насколько я могу сказать.
моя 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;
}
Таким образом, приложение идет example.com/ff
и должен перенаправить к example.com/ff/login
при попытке перейти в example.com/ff/home
без того, чтобы быть зарегистрированным. Вместо этого, когда Вы выполняете запрос к example.com/ff/home
PATH_INFO установлен на / домой (как ожидалось) и SCRIPT_NAME
'', таким образом, приложение генерирует перенаправление к example.com/home
вместо example.com/ff/home
Насколько я нашел, мои единственные решения:
Спасибо за любое понимание.
Бремя не лежит на nginx. Прокси или FastCGI передают информацию через сокет, которая интерпретируется. FastCGI не сильно отличается, за исключением контракта, который определяет, как информация, которая должна быть помещена в приложение CGI, должна передаваться и обрабатываться. SCRIPT_NAME - один из них.
Если вы хотите использовать прокси-сервер, вам нужно научить starman hoe интерпретировать определенные заголовки и указать nginx, чтобы он установил их с помощью proxy_set_header.