如何在OpenResty中将www域名重定向至非www域名?
解决OpenResty中www域名重定向到非www域名的问题
你的现有配置已经通过map指令定义了去掉www的域名变量$no_www_host,并且在HTTP(80端口)的跳转中用到了它,但缺少对HTTPS(443端口)下www域名的重定向处理,这就是直接访问https://www.yourdomain.com时不会跳转到非www地址的原因。
修改方案
只需在443端口的server块中添加重定向逻辑即可,具体修改后的完整配置如下:
http { lua_shared_dict auto_ssl 1m; lua_shared_dict auto_ssl_settings 64k; resolver 8.8.8.8 ipv6=off; map $host $no_www_host { default $host; "~^www\.(.*)$" $1; } init_by_lua_block { auto_ssl = (require "resty.auto-ssl").new() auto_ssl:set("allow_domain", function(domain) return true end) auto_ssl:init() } init_worker_by_lua_block { auto_ssl:init_worker() } server { listen 443 ssl; ssl_certificate_by_lua_block { auto_ssl:ssl_certificate() } ssl_certificate /etc/ssl/resty-auto-ssl-fallback.crt; ssl_certificate_key /etc/ssl/resty-auto-ssl-fallback.key; # 新增:处理HTTPS下的www域名重定向到非www if ($host != $no_www_host) { return 301 https://$no_www_host$request_uri; } location / { include proxy_params; proxy_pass http://unix:/run/ecommerce_demo.sock; } } server { listen 80; location /.well-known/acme-challenge/ { content_by_lua_block { auto_ssl:challenge_server() } } location / { return 301 https://$no_www_host$request_uri; # Redirect all HTTP to HTTPS } } server { listen 127.0.0.1:8999; client_body_buffer_size 128k; client_max_body_size 128k; location / { content_by_lua_block { auto_ssl:hook_server() } } } }
关键说明
- 新增的
if ($host != $no_www_host)判断会检测当前访问域名是否带www,若带www则返回301永久重定向到去掉www的HTTPS地址。 - 你的
auto_ssl配置中allow_domain返回true,会自动为www和非www域名申请SSL证书,无需手动配置证书文件。 - 修改完成后重启OpenResty使配置生效:
sudo systemctl restart openresty
内容的提问来源于stack exchange,提问作者Sandeep Prasad Kushwaha
相关产品推荐
相关产品推荐

