我有一个文件夹在由负载均衡器(LB)转发的域中,例如:http://domain.name/project-qa
,并且需要设置 nginx 来接收此请求并将其处理到 Craft CMS 安装。
据我所知,nginx 的别名功能存在一些问题,所以经过一段时间的搜索,我得到了这个配置,使用 root 而不是别名:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/project/public/;
index index.php index.html index.htm index.nginx-debian.html;
server_name domain.name;
location /project-qa/ {
root /var/www/html/project/public/;
rewrite ^/project-qa/(.*)$ /$1 break;
# try_files $uri $uri/ /project-qa/index.php;
location ~ \.php$ {
rewrite ^/project-qa/(.*)$ /$1 break;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
}
通过这个,我现在能够提供静态文件,但是任何应该定向到 index.php 文件的请求(例如http://domain.name/project-qa/admin
)都会出现同样的twig_error_runtime
错误。
我之前在 Apache 中使用 Alias 进行过此设置并且正在运行(因此 LB 上的规则正在运行),但是堆栈现在需要在 nginx 中,而我在设置它时遇到了问题。
Apache vhost 配置为:
<VirtualHost *:80>
DocumentRoot "/var/www/html/project/public/assets"
ServerName domain.name
Alias /project-qa /var/www/html/project/public
<Directory "/var/www/html/project/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
DocumentRoot 指向资产但从未使用过,因为该服务器从未使用过基本域,只有完整域http://domain.name/project-qa
(除了 LB ping 检查服务器是否在线)。
欢迎任何帮助。
答案1
简单地使用这个怎么样:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/project/public/;
index index.php index.html index.htm index.nginx-debian.html;
server_name domain.name;
location /project-qa/ {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
}