Я начинающий пользователь Nginx и пытаюсь проксировать следующее:
http://subdomain.example.com/mypage/login
TO
http://some_ip_address/login
(не только / login - на сайте есть и другие контексты, например / static, / api и т. д.)
Хотя я могу функционально выполнить эту работу, пользователь видит http://some_ip_address
в их браузере, чего я бы хотел избежать.
Эта конфигурация выглядит так:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 3;
server {
server_name this_server_ip;
location /mypage/ {
proxy_pass http://some_ip_address;
rewrite ^/mypage/(.*)$ http://some_ip_address/$1 last;
}
location / {
root /var/local/directory/;
}
}
}
Чтобы попытаться исправить это, я пробовал комбинации:
proxy_pass http://some_ip_address/;
(т.е. с завершающей косой чертой)proxy_set_header Host $host;
rewrite ^/mypage/(.*)$ /$1 last;
Но я либо получаю 404, либо обслуживаю страницу, размещенную на http://subdomain.example.com
, т.е. rewrite
работает, но proxy_pass
нет.
Есть несколько похожих вопросов по serverfault, но, к сожалению, ни один из них, похоже, не затрагивает мою особую разновидность этой проблемы. Примеры вот этот и вон тот.
Любые предложения будут очень признательны, спасибо.
Вы указываете this_server_ip
как имя хоста для этого виртуального хоста. Это означает, что этот виртуальный хост не используется ни для каких запросов с доменным именем, но ваш виртуальный сервер nginx по умолчанию используется для запросов для http://subdomain.example.com/
.
Вам нужно изменить свой server_name
к subdomain.example.com
, или добавить default_server
к listen
директива об этом server
block и удалите его из конфигурации nginx по умолчанию.
РЕДАКТИРОВАТЬ: попробуйте эту конфигурацию vhost:
server {
server_name subdomain.example.com;
location ~ /(mypage|static/api)/ {
proxy_pass http://some_ip_address/$1/;
}
location / {
root /var/local/directory/;
}
}
То есть вам не нужен rewrite
оператор вообще, потому что вы проксируете запрос на другой сервер.