当前位置: 首页 > 知识库问答 >
问题:

nginx似乎使用重写而不管server_name

葛海阳
2023-03-14

我有以下配置文件。

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上述重写规则有效。(啊)。。

server_name明确说“web.example.com”

2014/11/18 22:49:20[通知]30694#0:1868“^/(.)美元”匹配“/”,客户端:1.2.3.4,服务器:web。实例请求:“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设置了默认的_服务器:443;但不是听:80。(啊)

共有2个答案

慕朝明
2023-03-14

过了一会儿。。。

我发现我需要把位置/{}包起来

  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;
    }
  }
宋唯
2023-03-14

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

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

server {
    listen 80 default_server;
} 

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

返回301http://www.example.net$request_uri

 类似资料:
  • 我在微服务项目中遇到了Zuul-Proxy的奇怪行为。我的设置包括一个发现服务(Eureka)、一个API网关(Zuul)和两个微服务“a”和“B”。启动安装后,将通过“本地主机:10000/routes”显示以下路由: 我的Zuul配置如下所示: 现在我通过网关访问服务,并进行一些REST调用: 您可以下载一个包含4个组件的最小项目,它应该可以让您在以下位置轻松复制这种行为:https://gi

  • 我的代码看起来像 我的文件如下所示 当我运行程序时,我看到 我怎样才能修好它呢?

  • 问题内容: 我在2.32.2版的管道中使用Jenkinsfile。 由于各种原因,我想从pom中提取版本字符串。我希望我不必添加Maven帮助插件并使用评估。 我很快想到了一个sed表达式,使它脱离使用管道的pom,并在执行程序的jenkins工作区中的命令行上工作。 可能可以对其进行优化,但是我想了解为什么管道似乎在管道sh命令上失败。我玩过各种字符串格式,目前使用的是美元斜线字符串。 管道步骤

  • 问题内容: 我需要在我的老师不让我们使用IDE的前提下对此进行开头。我们使用TextPad。我要单击此标签,然后将其从“ H”更改为“ T”。目前,当我单击标签时,没有执行任何操作。我忘记了什么? 问题答案: 您的工具,但您还需要告知将事件发送给自己。在构造函数的最后,您需要说 如果您还记得可以将 任何 类放入,并且必须将您的侦听器连接到,则这更有意义。本身是侦听器这一事实并不能免除您的这种责任。

  • 问题内容: 我在使用该功能时遇到了麻烦。 我只需要知道SQL查询是否返回零行。 我已经尝试过以下简单的语句: 类型是哪里。上面的代码似乎不起作用。无论是否为空,它将始终打印该消息。 我检查了SQL查询本身,当存在行时它正确返回了非空结果。 关于如何确定查询是否已返回0行的任何想法?我用谷歌搜索,找不到任何答案。 问题答案: ResultSet.getFetchSize()不返回结果数!从这里: 使

  • 我有一个datatable,并将其导出为JSON格式。datatable的一列是日期列,如2013-01-09 02:18:11.117。