Как использовать Nginx для и перезаписи и proxy_pass при хранении вводимого пользователями URL

Я - пользователь новичка 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, но ни один, кажется, не обращается к моему конкретному аромату этой проблемы, к сожалению. Примеры - этот и что один.

Любые предложения очень ценились бы, спасибо.

2
задан 13 April 2017 в 15:14
1 ответ

Вы указываете 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 , потому что вы проксируете запрос к другому серверу.

0
ответ дан 3 December 2019 в 14:41

Теги

Похожие вопросы