NGINX维护模式配置问题:子页面无法跳转至维护页
解决NGINX维护模式下所有请求跳转至维护页面的问题
当前配置仅通过index指令设置了根路径的默认页面,但访问子路径时,NGINX会尝试查找对应路径的文件,找不到就返回404错误。要实现所有请求都返回维护页面,可通过以下两种常用方式修改配置:
方法一:使用try_files指令(推荐)
通过try_files让所有请求优先尝试访问目标资源,若不存在则 fallback 到维护页面,URL 保持不变:
server { server_name mypage.com; listen 443 ssl http2; listen [::]:443 ssl http2; root /var/www/mypage.com/public_html/; index maintenance.html; location / { # 尝试访问请求路径,不存在则返回维护页面 try_files $uri $uri/ /maintenance.html; } }
方法二:使用return或rewrite指令
直接将所有请求内部跳转到维护页面,同样保持URL不变:
使用return的配置:
server { server_name mypage.com; listen 443 ssl http2; listen [::]:443 ssl http2; root /var/www/mypage.com/public_html/; location / { # 直接返回维护页面内容,状态码保持200 return 200 $document_root/maintenance.html; } }
使用rewrite的配置:
server { server_name mypage.com; listen 443 ssl http2; listen [::]:443 ssl http2; root /var/www/mypage.com/public_html/; index maintenance.html; location / { # 内部重写所有请求路径到维护页面 rewrite ^(.*)$ /maintenance.html last; } }
注意事项
如果维护页面依赖静态资源(如CSS、图片、JS),需单独配置location块允许这些资源加载,避免被跳转到维护页面:
server { server_name mypage.com; listen 443 ssl http2; listen [::]:443 ssl http2; root /var/www/mypage.com/public_html/; index maintenance.html; # 放行维护页面所需的静态资源 location ~* \.(css|js|png|jpg|svg|ico)$ { root /var/www/mypage.com/public_html/; expires 1h; # 可选,设置缓存时间 } location / { try_files $uri $uri/ /maintenance.html; } }
内容的提问来源于stack exchange,提问作者Ommadawn
相关产品推荐
相关产品推荐

