我需要重写任何根子域请求并附加区域设置参数(如果它们尚未存在)。例如 - > 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;
}
}
答案 0 :(得分:1)
1)这是正确的做法吗?或者我应该在这里使用正则表达式? (新的,所以如果有其他问题,请lmk)
您应该使用$arg_locale != de
代替$args != locale=de
。查看文档:{{3}}
2)有没有办法记录位置块内的东西?无法在另一台服务器上运行相同的配置,日志记录会有所帮助。 (例如,如果它不匹配,则记录args是什么,或者如果它与另一个位置块匹配)。它只需要在根页面上发生,所以这是我当前的配置
调试日志:http://nginx.org/en/docs/http/ngx_http_core_module.html#var_arg_