Nginx 别名、root/rewrite 不起作用

Nginx 别名、root/rewrite 不起作用

我有一个文件夹在由负载均衡器(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;
    }
}

相关内容