
У меня есть сайт с некоторыми URL-адресами (http://местоположение:порт/) и хотите использовать NGINX для его проксирования.
У меня есть еще один сайт, по адресу (http://location2:port2) и также хотим проксировать его таким образом.
- Доступ к сайту 1 осуществляется через
http://main.com
и - Доступ к сайту 2 осуществляется через
http://main.com/site2
все его подссылки
Моя попытка провалилась.
server {
listen 80;
index index.html;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://landing-page:5000;
proxy_redirect off;
}
location /insights {
return 302 $uri/;
}
location /insights/ {
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header Host $http_host;
# proxy_set_header X-NginX-Proxy true;
rewrite ^/insights/?(.*) /$1 break;
proxy_pass http://ghost:2368/;
# proxy_redirect off;
}
}
Дополнительная информация
Я использую NGINX на Docker и мне нужно сопоставить порт 80 с портом 8080 на моем Mac.
Я нашел вот это:
http://localhost:8080/insights
устанавливает URLhttp://localhost/insights/
в браузереhttp://localhost:8080/insights/ghost
устанавливает URL-адрес наhttp://localhost:8080/ghost/
http://localhost:8080/insights/
устанавливает URL-адрес наhttp://localhost:8080/insights/
http://localhost:8080/insights/ghost/
устанавливает URL-адрес наhttp://localhost:8080/insights/ghost/
ЛЮБОЙ URL с конечным слешем, похоже, работает хорошо. Почему?
решение1
Ваш location /
блок должен быть в конце файла. Блоки расположения обрабатываются по порядку, и первый соответствующий блок будет выполнен. Поскольку location /
соответствует каждому запросу, он всегда будет выполнен.
В общем случае сначала следует разместить наиболее конкретные блоки, затем менее конкретные блоки и, наконец, для location /
всех остальных запросов.
Ваш файл должен быть оформлен следующим образом:
server {
listen 80;
index index.html;
location /insights/ {
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header Host $http_host;
# proxy_set_header X-NginX-Proxy true;
rewrite ^/insights/?(.*) /$1 break;
proxy_pass http://ghost:2368/;
# proxy_redirect off;
}
location /insights {
return 302 $uri/;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://landing-page:5000;
proxy_redirect off;
}
}