Azure App Service中WordPress(Nginx)的301重定向配置疑问
解决Azure App Service中WordPress的HTTP→HTTPS、www→非www 301重定向问题
运行时Nginx实际加载的配置文件
wordpress-alpine-php镜像默认使用/etc/nginx/nginx.conf作为主配置文件,但Azure App Service的容器/etc目录属于临时存储,容器重启后所有修改都会丢失——这就是你修改/etc下文件无效的核心原因。而/home/site/wwwroot/nginx.conf默认不会被Nginx自动加载,除非你手动调整启动命令让Nginx读取这个路径的文件。
是否该在nginx.conf中配置重定向?
可以,但不建议直接修改/etc下的文件(因为不持久)。正确的持久化配置方式是:
- 把包含重定向规则的自定义
nginx.conf放到/home/site/wwwroot目录(该目录是持久存储,不会随容器重启丢失) - 在Azure App Service的启动命令中添加复制命令和Nginx重载命令,示例:
cp /home/site/wwwroot/nginx.conf /etc/nginx/nginx.conf && nginx -s reload
更灵活的方式是不替换整个主配置,单独拆分重定向规则:
- 在
/home/site/wwwroot下创建nginx-conf.d目录,新建redirects.conf文件,内容如下:server { listen 80; server_name www.yourdomain.com; return 301 https://yourdomain.com$request_uri; } server { listen 80; server_name yourdomain.com; return 301 https://yourdomain.com$request_uri; } - 启动命令改为:
cp /home/site/wwwroot/nginx-conf.d/redirects.conf /etc/nginx/conf.d/ && nginx -s reload
这种方式无需改动主配置,兼容性更强。
Azure App Service更优的实现方式
有两种比修改Nginx配置更简单可靠的方案:
方法1:通过WordPress配置强制重定向
由于Azure App Service的SSL终止在前端负载均衡器,后端容器接收的是HTTP请求,需要先让WordPress信任X-Forwarded-Proto头,再强制HTTPS和非www:
在wp-config.php中添加以下代码:
// 信任Azure反向代理的HTTPS标识头 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; } // 强制后台和登录页使用HTTPS define('FORCE_SSL_ADMIN', true); define('FORCE_SSL_LOGIN', true); // 强制跳转到非www域名 if ($_SERVER['HTTP_HOST'] === 'www.yourdomain.com') { wp_redirect('https://yourdomain.com' . $_SERVER['REQUEST_URI'], 301); exit; }
同时在WordPress后台「设置→常规」中,将WordPress地址和站点地址都改为https://yourdomain.com。
方法2:使用Azure平台级重定向规则
这是最推荐的方案,完全无需修改代码或容器配置:
- 登录Azure门户,进入你的App Service资源
- 左侧菜单选择「自定义域名」
- 点击「添加重定向」:
- 源域名:选择
yourdomain.com(HTTP)和www.yourdomain.com(HTTP/HTTPS) - 目标域名:
https://yourdomain.com - 重定向类型:选择「永久(301)」
- 勾选「将所有路径重定向到目标路径」
- 源域名:选择
- 保存配置即可。平台会自动处理所有重定向请求,无需担心容器重启或配置丢失问题。
内容的提问来源于stack exchange,提问作者Don Chambers
相关产品推荐
相关产品推荐

