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


9

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

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

   server {
      listen      22.22.22.22:22222;
      root        /website2/;
      server_name example2.com www.example2.com;
}

您可能想看看map模块
gf_

2
你写了一些奇怪而毫无意义的东西。尝试从头开始,您想解决什么问题
Alexey 10年

Answers:


9

Nginx重写模块确实具有if指令(有关示例,请参见链接的文档),但没有else。等效于else所有未用的修改if

您可以if在内部使用,server { }但不能相反。如果在已经需要服务器的请求之前,甚至没有条件可以比较。在那里,您只能在(或没有)用户代理的情况下提供内容wget

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


3

在给定的格式中,它将不起作用:测试HTTP User-Agent意味着该请求已被接收。仅server在已经定义了某些块的情况下才有可能。您是否真的要根据在其他地方收到的请求的User-Agent字符串来启动新服务器?

如果您只想提供不同的内容,则可以根据请求的不同部分(例如用户代理)重定向到不同的路径等,例如,可以使用http://nginx.org/en/docs/http/ngx_http_rewrite_module。 html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.