как использовать Angular и Apache на том же Nginx с тем же доменом - PullRequest
1 голос
/ 26 сентября 2019

TLDR: настроить nginx для прослушивания на порту 80 и использовать

  • , если /api, expressJS на localhost:8081
  • , если /blog,wordpress / apache2 на localhost:8082
  • иначе угловой сервер localhost:8080 угловые и экспресс-серверы работают, но необходимо настроить wordpress / apache.

Подробно, Я установил следующее на том же VPS:

  1. angular интерфейс на порт 8080
  2. expressJS сервер на порт 8081
  3. WordPress работает наapache2 на порту 8082

В настоящее время я использую nginx для манипулирования запросами, и конфигурация

server {
        listen 443;

        ssl      on;
        ssl_certificate         /home/user/.ssh/ssl/ssl.crt;
        ssl_certificate_key     /home/user/.ssh/ssl/ssl.key.txt;

        root /var/www/html;

        index index.html index.htm index.nginx-debian.html index.php;

        server_name _;

        location / {
                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;
            proxy_pass          http://localhost:8080;
            proxy_read_timeout  90;
        }

        location /api {
                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;
            proxy_pass          http://localhost:8081;
            proxy_read_timeout  90;
        }
}

Теперь мне нужно разместить свой блог на mysite.com/blog.поэтому я добавил следующее в nginx config.

 location /blog {
                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;
            proxy_pass          http://localhost:8082;
            proxy_read_timeout  90;
        }

Теперь, когда я перехожу на example.com/blog, он перенаправляет на example.com:8082/blog.Как настроить nginx и apache вместе?

PS: Apache не требуется, пока работает wordpress.Но мне нравится сохранять nginx

PPS: я настроил nginx для переадресации всех http запросов на https://example.com/ через перенаправление 301

1 Ответ

1 голос
/ 26 сентября 2019

Вам необходимо добавить дополнительный / в конце параметра proxy_pass, чтобы сделать его полным URI (а не просто комбо протокола / имени хоста / порта), чтобы Nginx мог позаботиться о перезаписи URL:

location /blog/ {
  ...
  proxy_pass http://localhost:8082/;
  ...
}

Затем он удалит префикс /blog к запрошенному URL-адресу и добавит остаток к корневому URL-адресу http://localhost:8082/.

Из документации Nginx :

URI запроса передается на сервер следующим образом:

Если директива proxy_pass указана с URI, то когда запрос передается на сервер, частьнормализованного URI запроса, соответствующего местоположению, заменяется на URI, указанный в директиве:

location /name/ { proxy_pass http://127.0.0.1/remote/; }

Если proxy_pass указан без URI, URI запроса передается на сервер вта же форма, что и отправленная клиентом при обработке исходного запроса, или полный URI нормализованного запроса при обработке измененного URI:

location /some/path/ { proxy_pass http://127.0.0.1; }

В качестве альтернативы выМожнопринудительно переписать URL вручную, используя директиву rewrite:

location /blog/ {
  rewrite    /blog/?(.*) /$1 break;
  proxy_pass http://localhost:8082;
}

Это должно решить вашу непосредственную проблему, но если вы хотите полностью избавиться от HTTP-сервера Apache и директивы обратного прокси, вы можете взятьпосмотрите на PHP FastCGI для обслуживания Wordpress / PHP напрямую из Nginx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...