Nginx位置以及可选的子位置

时间:2018-09-05 16:01:36

标签: wordpress nginx angular6

我有一个配置了php-fpm和nginx的WordPress网站。效果很好。
现在,我创建了一个Angular Universal应用,该应用要显示在特定页面上。具体来说:

我希望WordPress在这里工作:mysite.com/myapp
我希望Angular在这里工作:mysite.com/myapp/any/path/

我尝试了许多不同的配置,但是没有任何效果。例如:

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

location ~ ^/myapp/(.+)$ {
    proxy_pass http://127.0.0.1:4000/$1$is_args$args;
    proxy_redirect off;
    proxy_read_timeout 60s;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;

    root /var/www/mysite/myapp/dist/;
}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm/tst04.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

因此,如您所见,我正在尝试将以/myapp/{something}开头的所有请求重定向到http://127.0.0.1:4000,但是它不起作用。所谓“无效”,是指所有请求都重定向到本地主机,甚至重定向到/myapp/-我不理解,因为/myapp/与正则表达式/myapp/(.+)不匹配(请注意{ {1}}符号。

我查看了nginx错误日志,发现当我输入+时,它尝试将其重定向到我不希望的mysite.com/myapp/上。当我输入upstream: "http://127.0.0.1:4000/index.php"时,它将重定向到正确的mysite.com/myapp/anypath/

问题:为什么它不起作用?

1 个答案:

答案 0 :(得分:0)

当!我想我必须在某个地方描述问题才能找到解决方案;)
所以这是发生了什么:

  • 我提出要求e.x. mysite.com/myapp
  • Nginx将其匹配到/位置
  • 它运行try_files到最后并触发/index.php?$args,它解析为/myapp/index.php
  • Nginx不断解析新位置,并且与^/myapp/(.+)$匹配,因此将其重定向到http://127.0.0.1:4000/index.php

塔丹!我们有解释。现在我该如何解决呢?好吧,解决方案非常简单。我不希望我的PHP文件针对^/myapp/(.+)$正则表达式进行数学计算,所以我这样修改了它:

"^/myapp/([^ php]+)$"(请注意引号)

一切都开始按预期进行。

发布此信息以防将来的读者遇到类似的问题。