我有一个网站 www.example.com 使用自定义 PHP 框架和加载完全不同框架的 CMS。它最初是在 apache2 上,现在我正在尝试转移到 nginx。www 域加载文件,但在加载子目录中的代码库时,它只是在我的 nginx 上返回 404。如果我切换回 apache2,它可以正常加载。这是我的配置,我基本上是通过查看其他 stackoverflow 答案拼凑出来的:
server {
listen 80 default;
client_max_body_size 256M;
access_log /var/log/nginx/site.access.log;
root /site;
index index.php;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ \.php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/site_php_errors.log";
fastcgi_buffers 32 32k;
fastcgi_buffer_size 64k;
include fastcgi_params;
}
location /cms {
root /cms/;
}
location ~ /cms/.+\.php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/site_php_errors.log";
fastcgi_buffers 32 32k;
fastcgi_buffer_size 64k;
include fastcgi_params;
}
}
我试过这个答案,但运气不佳。我必须错误地设置了一些基本配置,但似乎无法弄清楚是哪个。/cms中的.htaccess如下:
RewriteEngine On
RewriteBase /cms
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]
编辑:使用此示例更新了配置,我现在可以登录到 CMS,但它立即进入 302 重定向循环,我无法弄清楚为什么会发生这种情况:
server {
listen 80 default_server;
# client_max_body_size 256M;
root /application;
index index.php;
server_name _;
# access_log /var/log/nginx/application.access.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location /cms {
alias /application/cms;
try_files $uri $uri/ @cms;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass php-fpm:9000;
}
}
location @cms {
rewrite /cms/(.*)$ /cms/index.php?/$1 last;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
fastcgi_buffers 32 32k;
fastcgi_buffer_size 64k;
}
}
我想我在你的实际代码中找到了你的问题,这部分:location ~ \.php$ {
期望找到文件调用.php
是你总是有 404 错误的原因。只需像这样更新:
location ~ index.php$ {
include fastcgi_params;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
fastcgi_buffers 32 32k;
fastcgi_buffer_size 64k;
}
我建议您使用:(fastcgi_pass unix:/run/php/php7.1-fpm.sock;
请检查/run/php/
文件夹上的可用套接字)而不是本地网络调用php-fpm:9000
。很有表现力。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句