添加HSTS头后Nginx无法启动,删除配置后仍失败该如何解决?
修复过程不会丢失任何WordPress站点数据,站点文件默认存储在/var/www/目录下,文章、用户等业务数据存储在MySQL/MariaDB数据库中,以下操作均不会触碰这两部分内容,可放心执行。
问题原因
从错误日志可以明确核心报错是:"rewrite" directive is not allowed here in /etc/nginx/nginx.conf:109,说明你修改配置时误将rewrite规则放到了不支持该指令的配置块(如events块、http块外层等),rewrite指令仅允许放在server块、location块或if块中。ssl_stapling的警告不影响Nginx启动,仅为SSL证书缺少中间链的提示,可后续再修复。
修复步骤
- 先备份现有配置防止误操作:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
- 查看错误行附近的配置内容,定位错放的rewrite规则:
sed -n '100,120p' /etc/nginx/nginx.conf
- 修正配置:
- 如果该rewrite是你添加HSTS时误写入的无关规则,直接删除该行即可
- 如果是原本生效的站点规则,将其移动到对应站点的server块或location块中
- 测试配置合法性,出现
syntax is ok、test is successful即代表配置正确:
nginx -t
- 重启Nginx服务即可恢复访问:
systemctl restart nginx
配置完全乱掉的兜底方案
如果你已经无法区分原有配置和误改的内容,可以直接替换为Ubuntu 20.04默认的nginx.conf主配置,原有站点配置全部存放在/etc/nginx/sites-enabled/目录下不会被覆盖:
user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
替换后重复上述步骤4、步骤5即可启动Nginx。
内容的提问来源于stack exchange,提问作者Mishal johadien
相关产品推荐
相关产品推荐

