0

如果它们不存在,我需要重写任何根子域请求并附加语言环境参数。eg -> de.example.com 需要改写为 -> de.example.com/?locale=de。然后我将它代理到应用程序。

2个问题:

1)这是正确的方法吗?还是我应该在这里使用正则表达式?(新的,所以如果有其他问题,请lmk)

2)有没有办法记录位置块内的东西?无法在另一台服务器上使用相同的配置,日志记录会有所帮助。(例如,如果它不匹配,或者如果它在另一个位置块上匹配,则记录什么是 args)。它只需要发生在根页面上,所以这是我当前的配置

#existing default (nonsubdomain block)
server {
 server_name _;
 root /var/www/web_app;
 try_files $uri/index.html $uri.html $uri @app;
 location @app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app_server;
      }
}

#just added for subdomain 
server {

  server_name de.example.com;
  root /var/www/web_app;

  location / {
  try_files $uri/index.html $uri.html $uri @app;
 }  
  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }
  location = / {
   if ($args != locale=de ){ 
    rewrite ^ $scheme://de.example.com/?locale=de permanent;
    }
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }
}
4

1 回答 1

1

1)这是正确的方法吗?还是我应该在这里使用正则表达式?(新的,所以如果有其他问题,请lmk)

您应该使用$arg_locale != de而不是$args != locale=de. 查看文档: http: //nginx.org/en/docs/http/ngx_http_core_module.html#var_arg_

2)有没有办法记录位置块内的东西?无法在另一台服务器上使用相同的配置,日志记录会有所帮助。(例如,如果它不匹配,或者如果它在另一个位置块上匹配,则记录什么是 args)。它只需要发生在根页面上,所以这是我当前的配置

调试日志: http: //nginx.org/en/docs/debugging_log.html

于 2013-11-15T12:48:56.970 回答