NGINX 在 if 子句中使用 root 指令

NGINX 在 if 子句中使用 root 指令

我有一个 NGINX docker 容器,它在端口 8089 接收请求(由我主系统上的 NGINX 反向代理)。然后它应该检索 $host 变量以确定要提供的正确根目录。在我的错误日志中,NGINX 抱怨“此处不允许使用 Root 指令”。
我怎样才能实现相同的效果而不出现任何错误?
这是我的 NGINX 配置文件:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        set $handle 0;
        if ($host = 'lsg.example.com') {
                set $handle 2;
        }
        if ($host = 'www.example.com') {
                set $handle 1;
        }
        if ($handle = 0) {
                return 501;
        }
        if ($handle = 1) {
                root /var/www/laravel/public; #root directive not allowed here
                index index.php index.html index.htm;
        }
        if ($handle = 2) {
                root /var/www/pizza/public;
                index index.php index.html index.htm;
        }
        # Laravel params:
        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }
        location ~ \.php$ {
                try_files $uri /index.php =404;
                fastcgi_pass php-upstream;
                fastcgi_index index.php;
                fastcgi_buffers 16 16k;
                fastcgi_buffer_size 32k;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                #fixes timeouts
                fastcgi_read_timeout 600;
                include fastcgi_params;
        }
        location ~ /\.ht {
                deny all;
        }
        location /.well-known/acme-challenge/ {
                root /var/www/letsencrypt/;
                log_not_found off;
        }
        error_log /var/log/nginx/laravel_error.log;
        access_log /var/log/nginx/laravel_access.log;
}

答案1

似乎您的服务器没有与在同一主机上运行的 docker 容器建立连接。在您的示例中,您有上游 laradock,它为 提供请求127.0.0.1:8089

确保您的 Docker 容器公开此端口,并且您可以从运行 Web 服务器的主机向其发出成功的请求:

curl http://127.0.0.1:8089

答案2

事实证明,我只能使用 server_name 指令来区分不同的 $host 变量。无论如何,感谢您的帮助!

相关内容