我有一个配置了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/
。
问题:为什么它不起作用?
答案 0 :(得分:0)
当!我想我必须在某个地方描述问题才能找到解决方案;)
所以这是发生了什么:
mysite.com/myapp
/
位置try_files
到最后并触发/index.php?$args
,它解析为/myapp/index.php
^/myapp/(.+)$
匹配,因此将其重定向到http://127.0.0.1:4000/index.php
塔丹!我们有解释。现在我该如何解决呢?好吧,解决方案非常简单。我不希望我的PHP文件针对^/myapp/(.+)$
正则表达式进行数学计算,所以我这样修改了它:
"^/myapp/([^ php]+)$"
(请注意引号)
一切都开始按预期进行。
发布此信息以防将来的读者遇到类似的问题。