ELB在EC2上使用Nginx传输到wordpress时显示404

时间:2019-07-14 11:10:56

标签: amazon-web-services nginx

※我以example.com为例

我正在使用ELB和EC2开发应用程序。 结构如下。

当用户访问/ manage / *时,ELB将转移到wordpress托管实例。

这是ELB设置。

关于ELB,它可以工作,但是在转移到wordpress端后,CSS和JS文件的响应显示为404。

当我访问/ magazine / * URL时,加载wordpress主题的动画开始工作,但由于未加载css和js而卡住了。

我猜这是由于nginx配置引起的,但是无法解决。

这是配置文件的内容。我只添加/etc/nginx/conf.d/vhosts.conf并编写一些设置。我没有碰其他文件。

# vhosts.conf
server {
    listen 80;
    server_name example.com;

    return 301 https://$host$request_uri;

}

server {
    listen 443;
    server_name example.com;

    root /var/www/html;

    location /magazine {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    }
}

/var/www/html下,项目的结构如下。

/wp-content
/wp-admin
/wp-include
index.php
wp-config.php

有关其他信息,

  • 我安装了php-fpm。
  • 使用ACM和Route53设置SSL认证

其他信息

  • 数据库表siteurl中的homewp_options都设置为https://example.com/magazine

1 个答案:

答案 0 :(得分:0)

由于您不是从URL根目录提供wordpress,因此必须告诉wordpress从子目录加载资源。 WordPress支持文章中介绍了如何执行此操作。 [1]

您检查 WP_HOME WP_SITEURL 变量是否设置正确?
您能否编辑问题并包括浏览器尝试为css和js文件加载的URL,因为它在屏幕截图中并不完全可见?

编辑:

由于有了其他信息,我们知道wordpress可以按预期构造路径。因此,现在我与您分享nginx导致此问题的观点。

我环顾四周,发现nginx配置有两个可能的问题:

  • root语句可能应该在location块内。我不知道这是否真的必要,但很多人都这样做。 [2]
  • 位置块进行前缀匹配,并在服务器故障线程中将前缀 magazine 包含在 $ uri 变量中。 [3]
    您可以使用正则表达式删除前缀,如下所示:
location ~ ^/magazine(.*) {
    root /var/www/html;
    try_files $1 $1/ /index.php?$args;
}

注意:我不知道目录重定向$1和默认重定向到/index.php?$args是否适合提供js / css资产。如果不必要,您可能应该删除它们。

参考文献

[1] https://wordpress.org/support/article/changing-the-site-url/#changing-the-site-url
[2] https://serverfault.com/a/258540/531099
[3] https://serverfault.com/a/455853/531099