无论server_name如何,nginx似乎都使用重写

时间:2014-11-19 12:59:05

标签: nginx rewrite

我有以下配置文件。

server {
  listen 80;
  server_name web.example.com;

  access_log  /var/www/example/shared/log/web.access.log;
  error_log  /var/www/example/shared/log/web.error.log debug;

  rewrite ^/(.*)$ http://www.example.net$request_uri; permanent;
}

当我请求curl -Ii -H“Host:example.com”http://example.com时,上述重写规则有效。 (ARGH)..

server_name明确地说“web.example.com”

2014/11/18 22:49:20 [通知] 30694#0: 1868“^ /(。)$”匹配“/”,客户端:1.2.3.4,服务器:web .example.com,请求:“HEAD / HTTP / 1.1”,主持人:“example.com” 2014/11/18 22:49:20 [通知] 30694#0:* 1868重写重定向:“http://www.example.net/”,客户端:1.2.3.4,服务器:web.example.com,请求:“HEAD / HTTP /1.1“,主持人:”example.com“

此处不存在其他服务器{}配置。 Xavier(下面)指出我为listen设置了default_server:443;但不是为了听:80.(argh)

2 个答案:

答案 0 :(得分:1)

这不是问题的严格解决方案。

发生的事情是,您只有一个服务器块,它成为所有请求的默认服务器块,即使是与服务器名称不匹配的请求。您只需在配置中添加默认服务器块:

server {
    listen 80 default_server;
} 

顺便说一句,你有一个拼写错误(permanent之前的分号)并且你不需要重写,因为你有特定的正则表达式。请改用:

return 301 http://www.example.net$request_uri;

答案 1 :(得分:0)

过了一会......

我发现我需要包裹它的位置/ {}

  server {
    listen 80;
    server_name web.example.com;

    access_log  /var/www/example/shared/log/web.access.log;
    error_log  /var/www/example/shared/log/web.error.log debug;

    location / {
      rewrite ^/(.*)$ http://www.example.net$request_uri permanent;
    }
  }