nginx 重新声明服务器块

nginx 重新声明服务器块

我在 Plesk 上运行一个配置,在此期间 Plesk 会用默认模板随机覆盖我的 nginx.conf,所以我想做的是通过在需要时包含另一个配置文件来更改模板(类似于 httpd.conf 和 vhost.conf 的工作方式),但问题是,如果我重复相同的标签,它会起作用吗,例如我有这个 nginx 配置:

server {
    listen 72.25.454.19:80;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;


    client_max_body_size 128m;

    location / { # IPv6 isn't supported in proxy_pass yet.
        proxy_pass http://72.55.164.89:7080;

        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;
    }

    location /internal-nginx-static-location/ {
        alias      /usr/share/tomcat6/psa-webapps/example.com/example/;
        access_log /var/www/vhosts/example.com/statistics/logs/proxy_access_log;
        add_header X-Powered-By PleskLin;
        internal;
    }
}

并且我添加了相同的声明仅是为了更改别名,nginx 会合并这两个配置,还是只采用最后一个,不确定它是如何工作的。

server {
    listen 72.25.454.19:80;

    location /internal-nginx-static-location/ {
        alias      /usr/share/tomcat6/psa-webapps/example.com/example2/;
    }
}

答案1

你所做的不是相同的服务器块没有 server_name。

我想说的是第二个配置不含 server_name将被视为默认配置。然后被第一个配置否决使用 server_name

也没有重新声明位置。例如...

root@ubuntu:/etc/nginx/sites-enabled# cat a
server {
    listen 80;
    server_name 192.168.2.104;
    client_max_body_size 128m;

    location /internal-nginx-static-location/ {
        alias      /tmp/a/;
    }

    location /internal-nginx-static-location/ {
        alias      /tmp/c/;
    }
}
root@ubuntu:/etc/nginx/sites-enabled# nginx -t
nginx: [emerg] duplicate location "/internal-nginx-static-location/" in /etc/nginx/sites-enabled/a:10
nginx: configuration file /etc/nginx/nginx.conf test failed

我希望这能有所帮助。

相关内容