2015-10-25 2 views
1

С Apache я могу сделать обратный прокси-сервер, работающий с этой конфигурацией VirtualHost. Я выполнил nanoc view -p 8080, чтобы использовать порт 8080 для веб-приложения nanoc.Простой обратный прокси с Nginx (эквивалент Apache)

С этой настройкой http://scalatra.prosseek отображается на нанок.

<VirtualHost *:80> 
    ProxyPreserveHost On 
    ServerName scalatra.prosseek 
    ProxyPass /excluded ! 
    ProxyPass/http://127.0.0.1:8080/ 
    ProxyPassReverse/http://127.0.0.1:8080/ 
</VirtualHost> 

мне нужно иметь такую ​​же установку с Nginx, с некоторыми проб и ошибок, я мог бы заставить его работать с этой конфигурацией.

upstream aha { # ??? (1) 
     server 127.0.0.1:8080; 
     keepalive 8; 
} 

# the nginx server instance 
server { 
     listen 0.0.0.0:80; 
     server_name scalatra.prosseek; 
     access_log /usr/local/etc/nginx/logs/error_prosseek.log; 

     location/{ 
      # ??? (2) 
      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://aha/; # ??? (1) 
      proxy_redirect off; # ??? (3) 
     } 
} 

Это работает, но я не уверен, что это лучшая настройка. Здесь приходят на мои вопросы:

  • Является ли установка OK для http://scalatra.prosseek на локальный хост: 8080:
    • ли это правильно установка proxy_set_headers? Или я что-то пропустил?
    • Для прокси-паса и восходящего потока, это нормально, если два имени одинаковы?
    • Нужно ли мне proxy_redirect off;?

ответ

1

Ваша конфигурация близка.

  • Прокси-заголовки должны быть в порядке. Обычно Nginx передает заголовки, поэтому proxy_set_header используется, когда вы хотите их изменить, например, для того, чтобы заголовок Host присутствовал, даже если клиент не предоставил его.

  • Для прокси-сервера и восходящего потока да, имена должны совпадать.

  • Рассмотрите возможность оставить proxy_redirect (по умолчанию). Эта опция изменяет, вмешивается ли Nginx в ответы, такие как 301 & 302 перенаправления, включая номер порта. Отключение это означает, что ваше приложение upsteam должно взять на себя ответственность за передачу правильного имени и порта общедоступного домена в любых ответах на перенаправление. Если оставить его по умолчанию, значит, если вы случайно попытаетесь направить клиента на порт 8080, Nginx в некоторых случаях исправит его вместо порта 80.

Вы также не указали путь/исключение в своей конфигурации nginx. Добавить, что в с

location /excluded { 
    return 403; 
} 
Смежные вопросы