Конфигурация обратного прокси-сервера Elasticbeanstalk Nginx для другого сервера - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу изменить прокси-сервер, отличный от IP-адреса моего приложения, когда пользователь заходит на /blog на моем веб-сайте.Я установил правильную конфигурацию блока nginx location и успешно развернул ebextension с этой конфигурацией, но когда я перехожу к /blog, я получаю страницу 404, отображаемую с сервера моего приложения.При дальнейшей проверке запрос показывает, что запрос был сделан по IP-адресу приложения, а не по IP-адресу, найденному в блоке местоположения /blog в моей настройке nginx.Может кто-нибудь помочь определить, что может быть не так с моей ebextension, nginx или настройкой приложения, которая мешает работе блока местоположения nginx?Я не уверен, как выполнить тестирование, кроме запроса URL и проверки вкладки сетевых ресурсов в моих инструментах разработки.

Вот мои настройки папки ebextensions:

> ebextensions
=> nginx
==> conf.d
==- 01_nginx_blog_rp.config
-00_nginx_https_rw.config
-02_sequelize_db_migration.config

01_nginx_blog_rp.config :

files:
  "/etc/nginx/conf.d/01_blog_proxy.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      client_max_body_size 10M;

  "/etc/nginx/conf.d/02_blog_location_block.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
        server {
            location /blog {
                proxy_pass http://xxx.xxx.xxx.xxx:2368;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
            }
        }

container_commands:
  01_reload_nginx:
    command: "sudo service nginx reload"

1 Ответ

0 голосов
/ 25 февраля 2019

То, что вы пытаетесь достичь, невозможно, просто добавив простой блок location в conf.d.

Вы в основном определяете новый server блок с location внутри.Этот новый блок server никогда не используется nginx, потому что у вас уже есть конфигурация server по умолчанию, сгенерированная ElasticBeanstalk с настроенными директивами listen и server_name.Эти две директивы используются nginx, чтобы решить, куда направить запрос, поэтому все входящие запросы направляются на ваш сервер приложений и игнорируются ваши настройки.

Что вам действительно нужно сделать, это изменить существующийserver заблокируйте и добавьте в него свой location.

Это можно сделать несколькими различными способами:

- Создайте новую конфигурацию nginx иудалите один по умолчанию.

В этом примере aws они просто добавляют новый .ebextensions/proxy.config и заменяют конфигурацию nginx по умолчанию на собственную.Используя этот подход, вы можете полностью контролировать свою конфигурацию nginx.

- Создайте новую конфигурацию и обработайте ее до конфигурации по умолчанию.

Если вы все еще хотите сохранить конфигурацию по умолчанию, вы можете просто использовать свое 00_nginx_https_rw.config имяconfig, таким образом nginx сначала обработает вашу конфигурацию, и если в вашей конфигурации у вас будут правильные server_name и listen, она будет использоваться nginx для обработки входящего запроса.

- Добавить ловушкуизменить конфигурацию по умолчанию.

На форуме AWS вы можете найти другое решение - добавить хук скрипта bash для изменения существующей конфигурации.

...