我想在nginx服务器上部署lithium,但是只有Apache和IIS提供的配置。 我过去已成功为各种应用程序编写了几个nginx服务器配置,但我正在努力解决这个问题。
在nginx和锂论坛上已经问过这个问题,没有运气。
这是迄今为止我所做的最好的。
root /var/servers/my_app/app/webroot;
location / {
index index.php;
try_files $uri $uri/ index.php;
}
location ~ \.php {
fastcgi_pass unix:/tmp/php.socket;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/servers/my_app/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
问题在/(根页面)每个链接都有index.php前置,例如而不是
www.example.com/something
我得到了
www.example.com/index.php/something
不确定这是否与nginx配置有关,或者更确切地说是锂当它无法检测到Apache / IIS环境时所做的事情。无论哪种方式,我都无法解决它。
另一件事,当我访问“www.example.com/test”(通过直接URL输入)时,页面呈现正确,但是“www.example.com/test/”(带有斜杠)和“www .example.com / test / anything_here“已损坏 - 所有链接都附加到当前URL,例如按下相同的链接会创建:
www.example.com/test/
www.example.com/test/test
www.example.com/test/test/test
编辑:更新了配置 (很抱歉很多延迟编辑,但我仍然卡住了,最近重新开始解决此问题)
root /var/server/my_app/app/webroot/;
index index.php index.html;
try_files $uri $uri/ /index.php?$args;
location ~ \.php {
fastcgi_pass unix:/tmp/php.socket;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/servers/my_app/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
location ~/\.ht {
deny all;
}
}
正如我在评论中提到的,现在导致所有链接都包含index.php,它看起来像:
www.example.com/index.php/something
www.example.com/index.php/stylesheet.css
答案 0 :(得分:3)
我认为您的问题是try_files
不应位于location
区块内。
尝试此处显示的配置:http://li3.me/docs/manual/configuration/servers/nginx.wiki
我帮助定义它并在本地和生产中使用它。它不应该导致您报告的任何问题。
在下面复制:
server {
listen IP_ADDRESS_HERE:80;
server_name DOMAIN.COM;
root /var/www/DOMAIN.COM/webroot/;
access_log /var/log/DOMAIN.com/access.log;
error_log /var/log/DOMAIN.com/error.log warn;
index index.php index.html;
try_files $uri $uri/ /index.php?$args;
location ~ \.php$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
答案 1 :(得分:1)
我怀疑问题是Lithium依赖于某些环境变量,在这种情况下 - 链接生成,它使用PHP_SELF,这恰好是不正确的。
解决方案:
fastcgi_param PATH_INFO $fastcgi_path_info;
而不是之前的错误:
fastcgi_param PATH_INFO $fastcgi_script_name;
所以最终配置:
root /var/server/my_app/app/webroot/;
index index.php index.html;
try_files $uri $uri/ /index.php?$args;
location ~ \.php {
fastcgi_pass unix:/tmp/php.socket;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/servers/my_app$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~/\.ht {
deny all;
}
感谢rmarscher和mehlah @ lithum论坛。