我正在尝试重写以我的网站为目标的url,以便将所有网域名称重写为www.example.com并具有以下configuration:
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name _; rewrite ^ $scheme://www.example.com$request_uri permanent; location / { # Allow for large file uploads client_max_body_size 0; proxy_http_version 1.1; proxy_pass http://mysite; proxy_buffering off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } }
server { listen 80; root /opt/site2/www; index index.html index.htm; # Redirecto root requests to Share rewrite ^/$ /share; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.html; } # redirect server error pages to the static page /50x.html error_page 502 503 504 /maintenance.html; location = /maintenance.html { root /opt/site2/www; } location /share { # Allow for large file uploads client_max_body_size 0; # Proxy all the requests to Tomcat proxy_http_version 1.1; #proxy_buffering off; proxy_pass http://backend; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Server $host; } }
在服务器块,但我得到了“太多的redirect”错误。
现在,任何和所有的请求将打到这个服务器块:
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name _; # This doesn't do anything rewrite ^ $scheme://www.example.com$request_uri permanent; # Rest of file irrelevant }
因为:没有服务器块有一个有效的server_name (因此永远不会有主机名匹配),这是default_server。
因此,总是将请求到服务器的请求redirect到给定的主机名,以确保为www.example.com显式地存在服务器块:
server { listen 80; listen [::]:80 ipv6only=on; server_name www.example.com; # Everything else from "Tomcat server block" # or the proxy_pass config as appropriate }
并使用任何其他主机名将请求redirect到它:
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; return 301 http://www.example.com$request_uri; # Nothing else, because it wouldn't do anything }
在上面的注释中使用了return 301 ,因为它被认为是比无条件重写规则更好的做法。