我一直尝试运行lithium
Nginx,但没有成功。目录结构lithium
如下
lithium
|-> app libraries .htaccess
|-> webroot .htacess --other directories
|-> index.php .htaccess --other files
我将lithium
文件夹复制到我的/var/www/
。锂的路径是/var/www/lithium/
现在我在我的nginx.conf
server {
listen 80;
server_name localhost;
root /var/www/;
location /lithium {
rewrite ^/$ /app/webroot/ break;
rewrite ^(.*)$ /app/webroot/$1 break;
}
location /lithium/app {
rewrite ^/$ /webroot/ break;
rewrite ^(.*)$ /webroot/$1 break;
}
location /lithium/app/webroot {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?url=$1 break;
}
}
...then my php and other configurations
但是 nginx 总是抛出404
错误。为什么会这样?
我也尝试过
server {
listen 80;
server_name localhost;
root /var/www/;
location /lithium {
if (!-e $request_filename) {
rewrite ^/lithium/(.+)$ /lithium/app/webroot/$1 last;
break;
}
}
location /lithium/app/webroot {
if (!-e $request_filename) {
rewrite ^/lithium/app/webroot/(.+)$ /lithium/app/webroot/index.php?url=$1 last;
break;
}
}
...then my php and other configurations
但又出现了404
错误。
编辑
作为建议我把服务器的根目录改成了/var/www/lithium/app/webroot
这样,我的 nginx 配置如下所示
server {
listen 80;
server_name localhost;
root /var/www/lithium/app/webroot;
access_log /var/log/lithium/access.log;
error_log /var/log/lithium/error.log warn;
index index.php index.html;
try_files $uri $uri/ /index.php?$args;
location ~ \.php$
{
.. ...
......
}
现在我可以看到 lithium 的主页,但是当我转到 lithium 的测试仪表板时,它http://localhost/test
再次显示 lithium 的主页而不是测试仪表板。当我使用 apache 并转到 url 时,http://localhost/test
它显示了test dashboard
。因此,nginx 重写规则仍然不完全正确。如果我指向,root
我lithium's webroot
无法访问我的其他目录/var/www/
再次编辑
这是我的完整服务器块
server {
server_name lithium;
root /var/www/lithium/app/webroot;
access_log /var/log/nginx/lith.access.log;
error_log /var/log/nginx/lith.error.log;
listen 127.0.0.2:80;
rewrite_log on;
# rewrite rules for lithium
location / {
index index.php index.html;
try_files $uri $uri/ /index.php?url=$uri&$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;
fastcgi_param SERVER_NAME $host;
}
location ~ /\.ht {
deny all;
}
}
我使用 php 5.4.3。作为 php-fpm。我尝试按照 lithium 官方网站上提到的方法操作这里但我不明白这句话
cp -f sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
指的是哪个位置sapi
?有什么想法吗?
答案1
只需使用 指向 webroot 就会更简单root /var/www/lithium/app/webroot
。
或者您可以执行以下操作。
root /var/www
然后使用try_files
而不是 uglyif
的:
index index.php index.html;
location ~ \.php$ {
...
}
location lithium/app/webroot/ {
try_files $uri $uri/ /lithium/app/webroot/index.php?$args;
}
location /lithium/app/ {
rewrite ^/lithium/app/(.*)$ /lithium/app/webroot/$1;
}
location /lithium/ {
rewrite ^/lithium/(.*)$ /lithium/app/webroot/$1;
}
location / {
rewrite ^(.*)$ /lithium/app/webroot/$1;
}
不要忘记保护其他目录。
答案2
答案3
我认为您没有正确设置路径。尝试运行基本的 nginx 配置:http://lithify.me/docs/manual/configuration/servers/nginx.wiki
启用 php 错误也会有所帮助。除非启用 php 错误,否则诸如设置锂库路径之类的配置错误并不明显。
答案4
#include /etc/nginx/fastcgi_params;
您没有包含设置传递给 PHP 的大多数 FastCGI 变量的配置文件,因此 Lithium 可能无法确定正在请求哪个 URL。取消注释此行并将其移至该SCRIPT_FILENAME
行上方,以便您的块如下所示:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_NAME $host;
}