Обратное расположение папки Nginx на внешнем веб-сайте

Как новичок в Nginx, я пытаюсь заставить обратный прокси-сервер работать с внешним доменом. Позже мне нужно будет выполнить перенос на внутренний домен. При попытке обратного прокси на внешний домен я, кажется, наткнулся на стену, и ответ 404 не может быть найден.

Цель состоит в том, что когда я пытаюсь получить доступ к http://localhost/example, обратный прокси-сервер обслуживает www.example.com.

Это мой конфиг:

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /example/ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://www.example.com/;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Любой намек на то, что я делаю не так?


person Marco    schedule 12.05.2016    source источник


Ответы (1)


Говоря о http, веб-сервер определяет, какой из настроенных серверов был запрошен, проверяя заголовок Host. В вашем случае вы указываете nginx запросам прокси к другому серверу, но даете ему указание передать исходный заголовок Host этому серверу. Очевидно, что на удаленном сервере нет конфигурации, которая могла бы принимать запросы с этого домена. Итак, он отвечает вам 404.

Чтобы это работало, просто измените заголовок на proxy_set_header Host www.example.com;, где вместо www.example.com вы должны использовать тот же хост, что и в директиве proxy_pass. (или та же переменная)

person Evgeny Soynov    schedule 12.05.2016
comment
Это правильный блок? location / example / {proxy_set_header Host www.example.com; proxy_set_header X-Real-IP $ remote_addr; proxy_pass h * ttp: //www.example.com; } Когда я пытаюсь это сделать, я действительно получаю другую ошибку, но теперь ‹title› 500 - Internal Server Error ‹/title› - person Marco; 12.05.2016
comment
@Marco proxy_pass должен содержать url с протоколом и uri. Так что в вашем первом примере это было нормально proxy_pass http://example.com/; - person Evgeny Soynov; 12.05.2016