以下是一个修改后的Nginx配置,用于将 teek.ysundy.com
反向代理到主机的8085端口:
nginxserver { listen 80; listen [::]:80; server_name teek.ysundy.com; access_log /home/wwwlogs/teek.ysundy.com.log; location / { proxy_pass http://127.0.0.1:8085; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 如果需要处理WebSocket连接,添加以下行 # proxy_http_version 1.1; # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "upgrade"; } # 静态文件缓存设置(可选) location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { proxy_pass http://127.0.0.1:8085; proxy_cache_valid 200 302 12h; proxy_cache_valid 404 1m; expires 12h; } # 保留原有的well-known目录访问权限(用于SSL证书验证等) location ~ /.well-known { allow all; } }
这个配置做了以下修改:
如果你的静态网站不需要PHP支持,这个配置应该可以正常工作。如果需要PHP支持,你可能需要在8085端口的服务中处理,或者根据需要调整配置。
注意:配置修改后需要重新加载Nginx配置:
bashsudo nginx -t # 测试配置是否正确
sudo systemctl reload nginx # 重新加载配置
你可以在同一个 server
块中添加 301 跳转强制 HTTPS,但最佳实践是使用 两个单独的 server
块,一个专门处理 HTTP 到 HTTPS 的重定向,另一个处理 HTTPS 的反向代理。
nginxserver { listen 80; listen [::]:80; server_name teek.ysundy.com; # 301 永久重定向到 HTTPS return 301 https://$host$request_uri; access_log /home/wwwlogs/teek.ysundy.com_http.log; }
nginxserver { listen 443 ssl http2; listen [::]:443 ssl http2; server_name teek.ysundy.com; # SSL 证书配置(必须) ssl_certificate /path/to/your/fullchain.pem; # 替换为你的证书路径 ssl_certificate_key /path/to/your/privkey.pem; # 替换为你的私钥路径 # SSL 优化配置(可选但推荐) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; access_log /home/wwwlogs/teek.ysundy.com_https.log; # 反向代理配置 location / { proxy_pass http://127.0.0.1:8085; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 如果需要 WebSocket 支持 # proxy_http_version 1.1; # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "upgrade"; } # 静态文件缓存(可选) location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { proxy_pass http://127.0.0.1:8085; proxy_cache_valid 200 302 12h; proxy_cache_valid 404 1m; expires 12h; } # 保留 ACME(Let's Encrypt 证书验证) location ~ /.well-known { allow all; } }
HTTP → HTTPS 301 跳转
server
块监听 80
端口,直接返回 301
永久重定向到 HTTPS。http://teek.ysundy.com
会自动跳转到 https://teek.ysundy.com
。HTTPS 反向代理
server
块监听 443
端口,配置 SSL 证书,并代理到 8085
端口。ssl_certificate
和 ssl_certificate_key
,否则 HTTPS 无法工作。SSL 优化(可选但推荐)
TLSv1.2
和 TLSv1.3
,禁用不安全的旧版本(如 TLSv1.0、TLSv1.1)。WebSocket 支持(可选)
如果你还没有 SSL 证书,可以使用 Let's Encrypt 免费申请:
bashsudo apt install certbot python3-certbot-nginx # Debian/Ubuntu
sudo certbot --nginx -d teek.ysundy.com # 自动申请并配置
Certbot 会自动修改 Nginx 配置,并设置自动续签。
bashsudo nginx -t # 检查配置是否正确
sudo systemctl reload nginx # 重新加载配置
现在访问 http://teek.ysundy.com
会自动跳转到 https://teek.ysundy.com
,并通过反向代理访问 8085
端口的服务。
从你提供的 diff
输出来看,系统检测到 /etc/init.d/nginx
文件存在冲突,可能是因为你之前安装了 LNMP 2.0,而现在系统(或某个更新)尝试安装一个新的版本。
你有几个选项:
Y
或 I
→ 安装软件包维护者的版本(可能会覆盖 LNMP 的配置)N
或 O
→ 保留 LNMP 2.0 的版本(推荐,因为 LNMP 可能有特殊优化)D
→ 查看具体差异(你已经看到)Z
→ 暂停当前操作,进入 shell 检查由于你使用的是 LNMP 2.0,它可能对 Nginx 进行了定制化修改(比如 PHP-FPM 集成、特殊优化等),所以建议:
N
(保留当前版本),避免 LNMP 的功能被覆盖。如果已经不小心选择了 Y
(覆盖),可以尝试:
bashcd /root/lnmp2.0 # 进入 LNMP 目录
./install.sh nginx
/etc/init.d/nginx
(如果有备份):
bashcp /etc/init.d/nginx /etc/init.d/nginx.bak # 先备份当前版本
wget -O /etc/init.d/nginx "https://raw.githubusercontent.com/your-lnmp-repo/lnmp2.0/master/init.d/nginx" # 从 LNMP 官方恢复
chmod +x /etc/init.d/nginx
而不是直接使用:bashlnmp nginx {start|stop|reload|restart|status}
bashservice nginx restart # 或 systemctl restart nginx
apt
/yum
,避免兼容性问题。N
(保留当前 LNMP 2.0 的版本),确保 LNMP 的管理功能不受影响。根据你的错误信息,Nginx 启动失败的主要原因是 端口冲突(80 和 443 端口已被占用),同时还存在 重复的 server_name 配置。以下是完整的解决方案:
bashsudo netstat -tulnp | grep -E ':80|:443'
或
bashsudo lsof -i :80 sudo lsof -i :443
bashsudo pkill -9 nginx # 杀死所有 Nginx 进程
sudo fuser -k 80/tcp # 强制释放 80 端口
sudo fuser -k 443/tcp # 强制释放 443 端口
conflicting server name
警告错误信息:
nginx: [warn] conflicting server name "teek.ysundy.com" on 0.0.0.0:80, ignored
说明 Nginx 配置中存在重复的 server_name
,可能因为:
/etc/nginx/sites-enabled/default
,但 LNMP 有自己的配置文件(如 /usr/local/nginx/conf/vhost/teek.ysundy.com.conf
)。bashgrep -r "teek.ysundy.com" /etc/nginx/ /usr/local/nginx/conf/
/usr/local/nginx/conf/vhost/teek.ysundy.com.conf
,删除或注释其他文件中的配置。编辑 LNMP 的虚拟主机配置(通常位于 /usr/local/nginx/conf/vhost/teek.ysundy.com.conf
):
nginxserver { listen 80; server_name teek.ysundy.com; return 301 https://$host$request_uri; # HTTP 跳转 HTTPS } server { listen 443 ssl http2; server_name teek.ysundy.com; # Certbot 提供的证书路径 ssl_certificate /etc/letsencrypt/live/teek.ysundy.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/teek.ysundy.com/privkey.pem; # 其他配置(如反向代理到 8085 端口) location / { proxy_pass http://127.0.0.1:8085; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
bashsudo nginx -t # 测试配置
lnmp nginx restart # LNMP 专用重启命令
bashps aux | grep nginx
如果发现多个 Nginx 进程,可能是系统服务和 LNMP 冲突:
bashsudo systemctl stop nginx # 停止系统 Nginx 服务
sudo systemctl disable nginx # 禁用系统 Nginx 服务
lnmp nginx restart # 使用 LNMP 管理
bashsudo pkill -9 nginx
sudo rm -f /usr/local/nginx/logs/nginx.pid # 删除 PID 文件
lnmp nginx start
bashcurl -I https://teek.ysundy.com
应返回 200 OK
。
sudo pkill -9 nginx
+ sudo fuser -k 80/tcp
。conflicting server name
:删除重复配置,保留 LNMP 的虚拟主机文件。/etc/letsencrypt/live/teek.ysundy.com/
。lnmp nginx restart
,避免与系统 Nginx 服务冲突。如果仍有问题,请提供:
grep -r "teek.ysundy.com" /etc/nginx/ /usr/local/nginx/conf/
的输出ps aux | grep nginx
的结果。本文作者:任浪漫
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!