我正在尝试在特定位置的nginx + php-fpm中提供CachetHQ.文档给出了这个作用的例子status.example.com(有效):
server {
listen 80;
server_name status.example.com;
root /var/www/Cachet/public;
index index.php;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_keep_conn on;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,status.example.com我想服务于,而不是服务example.com/status.
我原以为这会起作用,但是从error.log我看到它正在尝试/etc/nginx/htmlindex.php,但它应该是/mnt/data/site/www-cachet/public/index.php:
location /status/ {
index index.php;
root /mnt/data/site/www-cachet/public;
try_files $uri index.php$is_args$args;
location ~ ^/status/.+\.php$ {
root /mnt/data/site/www-cachet/public;
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_keep_conn on;
}
}
Run Code Online (Sandbox Code Playgroud)
经过几个小时尝试了很多组合后,我让它工作的方式是:
location ^~ /status {
alias /mnt/data/site/www-cachet/public;
try_files $uri $uri/ @status;
location = /status/ {
rewrite /status/$ /status/index.php;
}
location ~ ^/status/(.+\.php)$ {
fastcgi_pass unix:/tmp/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /mnt/data/site/www-cachet/public/$1;
include fastcgi_params;
}
}
location @status {
rewrite /status/(.*)$ /status/index.php?/$1 last;
}
Run Code Online (Sandbox Code Playgroud)
最重要的是fastcgi_param,我必须将其设置为绝对路径而不是$document_root$fastcgi_script_name类似的路径。我不确定这是否是一个好的做法,但是添加alias到块中是行不通的,并且 nginx 或 FastCGI 都没有向我们显示它们试图读取的文件的路径。
尽管如此,我还是无法让 CachetHQ 正常工作。问题是源代码中的所有路径都是绝对路径,因此它们不会指向托管文件的子目录。解决方案是做一些我从一开始就不愿意做的事情:将其托管在子域中。
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |