如何在Zope+Apache站点前部署Nginx/HAProxy实现静态页展示后跳转
方案可行性结论
完全可以实现,无需修改现有Zope+Apache的任何业务逻辑与服务配置,优先推荐使用Nginx做前置反向代理实现需求,HAProxy也可实现但静态内容处理效率和配置便捷度低于Nginx。
具体部署步骤
1. 制作静态下线提示页
创建notice.html,写入如下内容,可根据需求修改提示文案与跳转等待时长:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>站点下线提示</title> <!-- 30秒后自动跳转到当前访问的实际站点路径 --> <meta http-equiv="refresh" content="30; url=$request_uri"> <style> .container {max-width: 800px; margin: 100px auto; text-align: center; font-size: 18px; line-height: 2;} </style> </head> <body> <div class="container"> <h2>重要提示</h2> <p>本站计划于3个月后正式下线,请提前做好相关数据备份工作。</p> <p>页面将在30秒后自动跳转至站点内容,您也可以<a href="$request_uri">点击此处直接访问</a>。</p> </div> </body> </html>
将文件放到Nginx的静态资源目录,例如/usr/share/nginx/html/下。
2. 调整原有服务端口
如果原有Apache服务直接监听公网的80/443端口,先将Apache的监听端口修改为内部端口如8080(HTTPS对应修改为8443),无需修改其他配置。
3. 配置Nginx反向代理
编辑Nginx站点配置文件,示例配置如下:
server { listen 80; server_name 你的站点域名; root /usr/share/nginx/html; # 可选配置:给看过提示页的用户设置7天有效期的cookie,避免每次访问都弹出提示 if ($cookie_visited_notice != '1') { add_header Set-Cookie "visited_notice=1; Max-Age=604800; Path=/"; rewrite ^ /notice.html break; } location / { # 代理指向原来的Apache服务地址 proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location = /notice.html { # 替换notice.html里的$request_uri为实际请求路径 sub_filter '$request_uri' $request_uri; sub_filter_once on; } }
配置完成后执行nginx -s reload生效即可。
注意事项
- 整个配置过程无需操作Zope相关服务,也不需要修改原有Apache的业务配置,仅调整端口即可
- 若原有Apache本身就部署在内网、没有直接对外暴露端口,可跳过端口调整步骤,直接将Nginx的proxy_pass指向原有Apache的内网访问地址
- 如需开启HTTPS,只需在Nginx侧配置SSL证书即可,原有Apache不需要做HTTPS相关调整
内容的提问来源于stack exchange,提问作者cuteboyucsc
相关产品推荐
相关产品推荐

