Я - пользователь новичка Nginx, пытающийся проксировать следующее:
http://subdomain.example.com/mypage/login
TO
http://some_ip_address/login
(не только / вход в систему - сайт имеет другие контексты также, например, / помехи, / 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's или подаю страницу, в которой это размещается http://subdomain.example.com
, т.е. rewrite
работы, но proxy_pass
не делает.
Существует несколько подобных вопросов на serverfault, но ни один, кажется, не обращается к моему конкретному аромату этой проблемы, к сожалению. Примеры - этот и что один.
Любые предложения очень ценились бы, спасибо.
Вы указываете this_server_ip
в качестве имени хоста для этого виртуального хоста.Это означает, что этот виртуальный хост не используется ни для каких запросов с доменным именем, но ваш виртуальный сервер nginx по умолчанию используется для запросов для http://subdomain.example.com/
.
Вы необходимо изменить ваше имя_сервера
на subdomain.example.com
или добавить default_server
в директиву listen
на этом сервере
и удалите его из конфигурации 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
, потому что вы проксируете запрос к другому серверу.