1. 配置 Nginx 代理到特定端口
1.1 编辑 Nginx 配置文件
在 Nginx 的配置目录中创建或编辑一个配置文件,例如 /etc/nginx/conf.d/example.conf
:
sudo nano /etc/nginx/conf.d/example.conf
1.2 添加服务器块配置
在配置文件中添加以下内容,将请求代理到 8080 端口:
server {
listen 80;
server_name example.com; # 替换为实际域名
location / {
proxy_pass http://localhost: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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
1.3 验证并重新加载 Nginx 配置
验证配置文件的语法正确性:
sudo nginx -t
重新加载 Nginx 以应用更改:
sudo systemctl reload nginx
2. 配置 SSL/TLS 证书
2.1 安装 Certbot
根据你的系统安装 Certbot:
-
Ubuntu:
sudo apt update sudo apt install certbot python3-certbot-nginx
-
CentOS/RHEL:
sudo yum install epel-release sudo yum install certbot python3-certbot-nginx
2.2 生成证书
使用 Certbot 自动配置 Nginx:
sudo certbot --nginx -d example.com # 替换为实际域名
2.3 验证证书
访问 https://example.com
并检查证书是否有效。你也可以使用 SSL Labs SSL Test 进行检测。
2.4 配置 Nginx 以使用 SSL/TLS
在 Nginx 配置文件中配置 SSL/TLS:
server {
listen 80;
server_name example.com; # 替换为实际域名
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com; # 替换为实际域名
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-CBC-SHA256:ECDHE-RSA-AES256-CBC-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost: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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
2.5 重新加载 Nginx 配置
sudo systemctl reload nginx
3. 解决端口冲突问题
3.1 查找占用端口的进程
使用以下命令查找占用 443 端口的进程:
sudo netstat -tulnp | grep :443
或:
sudo ss -tulnp | grep :443
3.2 停止占用端口的进程
根据找到的进程 ID (PID),停止该进程:
sudo kill -9 <PID>
3.3 检查 Nginx 配置
确保没有多个 Nginx 配置文件试图监听相同的端口:
sudo grep -R "listen 443" /etc/nginx/
3.4 检查 Apache 配置(如果适用)
确认 Apache 配置文件中没有监听 443 端口:
sudo grep -R "Listen 443" /etc/httpd/
或:
sudo grep -R "Listen 443" /etc/apache2/
3.5 调整 Nginx 配置
如果需要,同时运行 Nginx 和其他服务时,可以调整 Nginx 配置文件中的端口号:
server {
listen 8443 ssl;
server_name example.com; # 替换为实际域名
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-CBC-SHA256:ECDHE-RSA-AES256-CBC-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost: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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
3.6 重新启动相关服务
重启 Nginx 和其他相关服务:
sudo systemctl restart nginx
sudo systemctl restart apache2 # 如果你使用的是 Apache
3.7 检查系统状态
检查系统是否有其他端口冲突情况或资源争用问题:
sudo lsof -i :443
3.8 确认系统时间
确保服务器的系统时间准确:
date
总结
通过以上步骤,你可以配置 Nginx 以使用 SSL/TLS,并解决端口冲突问题。确保你的服务配置正确,证书有效,且端口未被其他进程占用。如果问题仍然存在,请详细检查错误日志并与相关支持团队联系获取进一步帮助。