如何使用 nginx conf 进行 if/else 语句?

use*_*936 15 linux configuration nginx

可以用 nginx 做这样的事情吗?

if ( $http_user_agent = "wget" ){
   server {
      listen      192.0.2.11:1111;
      root        /website1/;
      server_name website1.example www.website1.example;
else 

   server {
      listen      192.0.2.22:22222;
      root        /website2/;
      server_name example2.example www.website2.example;
}
Run Code Online (Sandbox Code Playgroud)

Esa*_*nen 14

Nginx 重写模块确实有if指令(有关示例,请参阅链接的文档),但没有else. 等价的 forelse所有没有用if.

您可以if在 a 内使用,server { }但不能反过来使用。在已经需要服务器的请求之前,您甚至不会在 if 中比较条件。在那里,您只能在用户代理是(或不是)时提供内容wget

另请注意,您不应使用ifinside,location因为它可能无法按预期工作(请参阅If Is Evil)。


小智 3

在给定的形式中,它不起作用:测试 HTTP 用户代理意味着请求已收到。这只有在server已经定义了某个块的情况下才有可能。您真的想根据您在其他地方收到的请求的用户代理字符串启动新服务器吗?

如果您只想提供不同的内容,重定向到不同的路径等,具体取决于请求的部分(例如用户代理),这是可能的,例如使用http://nginx.org/en/docs/http/ngx_http_rewrite_module。 html