Php 通过Amazon API网关和网络负载平衡器使用Nginx设置Wordpress时面临重定向问题

Php 通过Amazon API网关和网络负载平衡器使用Nginx设置Wordpress时面临重定向问题,php,wordpress,nginx,amazon-elb,amazon-api-gateway,Php,Wordpress,Nginx,Amazon Elb,Amazon Api Gateway,通过Amazon API网关和网络负载均衡器使用Nginx设置Wordpress时面临重定向问题。 描述:- 我们有自己的主网站xyz.com(由AmazonAPI网关和负载平衡器提供服务),希望我们的博客出现在xyz.com/blogs上。 因此,我们设置了Amazon API网关和负载平衡器,将for xyz.com/blogs的任何请求重定向到包含Wordpress和Nginx的EC2。 问题:- 我们面临的问题是,主页呈现得很好,但当我们尝试呈现任何其他页面时,例如:-xyz.com/b

通过Amazon API网关和网络负载均衡器使用Nginx设置Wordpress时面临重定向问题。

描述:-
我们有自己的主网站xyz.com(由AmazonAPI网关和负载平衡器提供服务),希望我们的博客出现在xyz.com/blogs上。 因此,我们设置了Amazon API网关和负载平衡器,将for xyz.com/blogs的任何请求重定向到包含Wordpress和Nginx的EC2。

问题:-
我们面临的问题是,主页呈现得很好,但当我们尝试呈现任何其他页面时,例如:-xyz.com/blogs/my first post/xyz.com/blogs/wp admin,它就会卡在那里,没有任何响应。作为初始调试的一部分,我们发现Wordpress正在重定向到网络负载均衡器url(根据我们的猜测),该url不可访问,我们没有得到任何响应。

这就是我们默认的nginx-conf的样子(/etc/nginx/conf.d/xyz_blogs.conf),我们从这个链接得到它=>

我们如何解决这个问题?
在此感谢您的帮助。

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
        }
}
这是:

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
        }
}

很抱歉迟发了这篇文章,但目前我们使用的解决方案可能伸缩性不大。我们所做的是将我们的网站和wordpress部署在同一台机器中,但部署在不同的容器中。因此,我们的网站运行在不同的容器中,wordpress运行在不同的容器中,但两者都存在于相同的EC2中。 我们使用wordpress中的nginx配置将请求重定向到其他容器。目前,我的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;
    }
}
如果我们能够在不同的EC2中部署wordpress容器,并且仍然能够实现这一点,那就太好了。 如果有人能在不同的EC2中为wordpress容器的问题提出一个更好的可伸缩工作解决方案,这将非常有帮助,而且会更好。
谢谢。

很抱歉这篇文章太晚了,但目前我们使用的解决方案可能伸缩性不大。我们所做的是将我们的网站和wordpress部署在同一台机器中,但部署在不同的容器中。因此,我们的网站运行在不同的容器中,wordpress运行在不同的容器中,但两者都存在于相同的EC2中。 我们使用wordpress中的nginx配置将请求重定向到其他容器。目前,我的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;
    }
}
如果我们能够在不同的EC2中部署wordpress容器,并且仍然能够实现这一点,那就太好了。 如果有人能在不同的EC2中为wordpress容器的问题提出一个更好的可伸缩工作解决方案,这将非常有帮助,而且会更好。
谢谢。

检查安全组以允许负载平衡器访问您的应用程序<代码>服务器名称xyz.com您可能需要添加“u”感谢回复@Jean JacquesMOIROUX Network Load Balancer能够访问该应用程序。另外,加上“u”并没有改变任何事情。还有其他想法吗?请检查安全组以允许LoadBalancer访问您的应用程序<代码>服务器名称xyz.com您可能需要添加“u”感谢回复@Jean JacquesMOIROUX Network Load Balancer能够访问该应用程序。另外,加上“u”并没有改变任何事情。还有其他想法吗?谢谢@Jean-JacquesMOIROUX->在做了更改之后,我发现了以下错误<代码>2020/02/28 11:06:13[错误]6613#6613:*3400 recv()在从上游读取响应头时失败(104:由对等方重置连接),客户端:***(IP),服务器:xyz.com,请求:“GET/HTTP/1.1”,上游:http://127.0.0.1:9000/,主机:“xyz博客nlb someNLBGuid.elb.aws region.amazonaws.com”页面给出了
502坏网关nginx
更新1:在服务器名称上添加
*.amazonaws.com
,看看发生了什么感谢@Jean-JacquesMOIROUX>的响应在做了更改后,我发现了下面的错误<代码>2020/02/28 11:06:13[错误]6613#6613:*3400 recv()在从上游读取响应头时失败(104:由对等方重置连接),客户端:***(IP),服务器:xyz.com,请求:“GET/HTTP/1.1”,上游:http://127.0.0.1:9000/,主机:“xyz博客nlb someNLBGuid.elb.aws region.amazonaws.com”页面在服务器名称上给出了
502坏网关nginx
更新1:add
*.amazonaws.com
,看看发生了什么事情这是一个不同的问题,还是一个发布问题的解决方案?@Cristik这是我目前实施的发布问题的解决方案。但是一个更好的解决方案总是受欢迎的:)这是一个不同的问题还是一个针对已发布问题的解决方案?@Cristik这是针对已发布问题的解决方案,我目前已经实施。但更好的解决方案总是受欢迎的:)