Проблема перенаправления при настройке Wordpress с Nginx через Amazon API Gateway и Network Load Balancer
Проблема перенаправления при настройке Wordpress с Nginx через Amazon API Gateway и Network Load Balancer.
Описание:-
У нас есть основной веб-сайт xyz.com(обслуживаемый Amazon API Gateway и Load Balancer), и мы хотим, чтобы наши блоги размещались на xyz.com/blogs. Итак, мы настроили Amazon API Gateway и Load Balancer для перенаправления любого запроса для xyz.com/blogs на EC2, содержащий Wordpress с Nginx.
Проблема:-
Проблема, с которой мы сталкиваемся, заключается в том, что домашняя страница отображается нормально, но когда мы пытаемся отобразить любую другую страницу, например:- xyz.com/blogs/my-first-post/ или xyz.com/blogs/wp-админ затем он застревает там, и ничего не приходит в качестве ответа. В рамках нашей начальной отладки мы обнаружили, что Wordpress перенаправляет URL-адрес Network Load Balancer (который, как мы предполагаем) недоступен, и мы не получаем никакого ответа.
Так выглядит наша конфигурация nginx по умолчанию (/etc/nginx/conf.d/xyz_blogs.conf), которую мы получили по этой ссылке => Wordpress|Nginx
# Upstream to abstract backend connection(s) for php
upstream php {
server unix:/tmp/php-cgi.socket;
server 127.0.0.1:9000;
}
server {
## Your website name goes here.
server_name xyz.com;
## Your only path reference.
root /var/www/html;
## This should be in your http block and if it is, it's not needed here.
index index.php;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
# This is cool because no php is touched for static content.
# include the "?$args" part so non-default permalinks doesn't break when using query string
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
Как решить этот вопрос?
Заранее благодарим за любую помощь, оказанную настоящим.
2 ответа
Твое это:
upstream php-app { # <-- change name of the upstram
# server unix:/tmp/php-cgi.socket; # <-- Remove this
# List of [IP:Port] OR list of [sockets] not both mixed
server 127.0.0.1:9000;
# server 127.0.0.1:9001; # example
# server 127.0.0.1:9002; # example
}
server {
listen 80 default_server; # <-- Add this line
listen [::]:80 default_server; # <-- Add this line
server_name xyz.com *.xyz.com;
root /var/www/html;
# index index.php; # <-- Will be removed, you app is provided by the socket/port
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
location / { # Put this at the end, NGinx apply priority
proxy_pass http://php-app; # Add this line
}
}
Обновление 1:
обновить конфигурацию
...
server_name xyz.com *.xyz.com *.amazonaws.com;
...
Извините за позднюю публикацию, но в настоящее время мы реализовали это с помощью решения, которое может быть не очень масштабируемым. Что мы сделали, так это то, что мы развернули наш веб-сайт и WordPress на одном компьютере, но в разных контейнерах. Итак, наш веб-сайт работает в другом контейнере, а wordpress - в другом контейнере, но оба они находятся в одном EC2. И мы используем конфигурацию nginx в wordpress для перенаправления запросов в другой контейнер. В настоящее время моя конфигурация nginx выглядит примерно так:
upstream php {
server unix:/tmp/php-cgi.socket;
server 127.0.0.1:9000;
}
server {
listen 80;
server_name xyz.com;
root /var/www/html;
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
index index.php;
location /blog {
try_files $uri $uri/ /blog/index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
}
location / {
rewrite ^/(.*) /$1 break;
proxy_pass http://xyz-container:80;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Было бы здорово, если бы мы каким-то образом смогли развернуть контейнер wordpress в другом EC2 и при этом добиться этого. Будет действительно полезно и намного лучше, если кто-то сможет предложить лучшее масштабируемое рабочее решение проблемы с контейнером wordpress в другом EC2. Спасибо.