添加Nginx proxy_pass代理Redis与MongoDB时启动失败求助
问题排查:Nginx添加Redis代理后启动失败,提示server_name含可疑符号
问题现象
- 仅配置MongoDB代理(监听27030转发至127.0.0.1:27027)时,Nginx可正常启动
- 添加Redis代理配置(监听6379转发至127.0.0.1:6379)后,Nginx启动失败,报错指向
/etc/nginx/sites-enabled/default第24行的server_name包含可疑符号
相关配置及报错信息
初始Nginx Stream配置
stream { server { listen 27030; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass stream_mongo_backend; } upstream stream_mongo_backend { server 127.0.0.1:27027; } }
添加Redis后的Stream配置
stream { server { listen 27030; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass stream_mongo_backend; } upstream stream_mongo_backend { server 127.0.0.1:27027; } server { listen 6379; proxy_pass stream_redis_backend; } upstream stream_redis_backend { server 127.0.0.1:6379; } }
启动报错信息
nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Sun 2024-08-25 10:37:15 CST; 2min 17s ago Docs: man:nginx(8) Process: 3828683 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 3828684 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE) CPU: 32ms Aug 25 10:37:12 iZbp1cszroygcwaqhf9sk1Z nginx[3828684]: nginx: [warn] server name "http://app.xx.com/" has suspicious symbols in /etc/nginx/sites-enabled/default:24
站点配置文件(/etc/nginx/sites-enabled/default)
server { listen 80 default_server; listen [::]:80 default_server; # Default server configuration server_name http://app.xx.com/; // line 24 location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:3000; # SSL configuration } } server { # Default server configuration server_name app.xx.com; # managed by Certbot location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:3000; # SSL configuration } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/app.kuangcc.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/app.kuangcc.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = app.kuangcc.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80 ; listen [::]:80 ; server_name app.xx.com; return 404; # managed by Certbot }
问题原因及修复方案
原因分析
报错和Redis代理配置无关,核心问题是站点配置文件第24行的server_name格式错误:
server_name仅需填写纯域名,不能包含http://前缀和末尾的/斜杠- 这些额外符号属于Nginx禁止的可疑字符,导致配置校验不通过
修复步骤
- 编辑站点配置文件:
vi /etc/nginx/sites-enabled/default
- 修改第24行的
server_name字段,将:
server_name http://app.xx.com/;
替换为:
server_name app.xx.com;
- 修正配置中的注释格式(Nginx仅支持
#注释,//属于无效格式,虽不直接导致启动失败,但建议统一修正):
# line 24
- 校验配置文件合法性:
nginx -t
- 重启Nginx服务:
systemctl restart nginx
内容的提问来源于stack exchange,提问作者user824624
相关产品推荐
相关产品推荐

