nginx 重定向在位置指令中不起作用

nginx redirection not working inside location directive

我有两个位置指令都包含条件重定向。

server {
        listen 443 ssl;
        ssl_certificate /etc/ssl/cert.pem;
        ssl_certificate_key /etc/ssl/cert.key;
        server_name services.gixxx.de;
        
        location / {
            if (-f $document_root/maintenance.on) {
                return 503;
            }
            root /usr/share/nginx/html;
            index index.html index.htm;
            try_files $uri $uri/ /index.html =404;
            proxy_set_header Host $host;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            add_header Cache-Control 'no-cache, must-revalidate, proxy-revalidate, max-age=0';
        }

        location /api {
            if (-f $document_root/maintenance.on) {
                return 503;
            }
            proxy_read_timeout 120;
            proxy_connect_timeout 120;
            proxy_send_timeout 120;
            proxy_pass http://serviceapp;
        }
        upstream serviceapp {
            server serviceapp:3000;
        }

当我在路由文件夹上创建文档名称 maintenance.on 时,它适用于第一个 location / { 指令,但不适用于 location /api { 部分。 这里出了什么问题。

您没有为第二个块定义 root。您应该将 root 语句移动到外部块中,并允许它被两个 location 块继承。