2017-06-16 71 views
1

我有工作以下罚款。nginx的端口特定子域

server { 
    listen 8080; 
    server_name sub.example.com; 

    location/{ 
     proxy_pass http://10.0.1.88:8080/; 
    } 
} 

server { 
    listen 80 default_server; 

    root /var/www/html; 

    index index.html index.htm index.nginx-debian.html; 

    server_name example.com; 
    #server_name _; 

    location/{ 
     try_files $uri $uri/ =404; 
    } 
} 
  1. http://sub.example.com:8080 =预期的结果

  2. http://example.com =预期的结果

  3. http://example.com:8080 =意想不到的结果=相同第一

第三显示完全一样首先 我预计它会失败?我想要发生的是 -

a。重定向回到端口80

OR 

b。返回404

这一直做我的头几个小时:(

欣赏的帮助。

感谢

回答

1

this document但要特别注意一个默认服务器的概念。

无论是在你的问题server块是默认的服务器,一个含蓄和一个明确的。在端口808接收的任何请求0(与主机名无关)将由第一个服务器块处理。同样,对于第二块和端口80

如果要执行你的指令server_name,你需要创建一个新的捕获所有server块用listen 8080 default_server;指令,并把你的要求的动作在里面。

例如:

server { 
    listen 8080 default_server; 
    return 301 http://example.com/; 
} 
+0

感谢您的@richard是一个真正的帮助...但它没有引进一个问题... 现在,当使用http://sub.example.com/它显示了http://example.com 这是否意味着我需要创建另一个服务器块来处理这种情况? 这会得到相当长的,如果你有很多子域还是我失去了一些东西... – mybigman

+0

它无关,与子域。对于您收听的每个端口,您都有一个隐式或显式默认服务器。在传统的配置中,所有的站点都会使用端口80作为'http',这意味着只有一个服务器块是全部。 –