nginx添加ssl证书后http无法访问原因及解决方法

博客作者在配置nginx服务器时遇到一个问题,即在启用SSL证书后,http协议访问网站出现跨域问题,导致后端接口无法调用。为解决此问题,作者尝试修改配置,将http请求重定向到https。最终通过设置两个server块,一个监听443端口处理https请求,另一个监听80端口并返回301重定向,成功解决了跨域问题。

博客网站的nginx服务器接入ssl证书后提高了数据交互的安全性,但最近发现在http协议下访问网站出现了跨域访问的问题导致后端接口无法被调用。原因是在http协议下访问的是80端口,调用后端接口访问的是443端口所以产生了跨域问题。
跟随网上教程将ssl on去掉并将listen 443改为listen 443 ssl,失败。
索性不用80端口了,在nginx中配置更改为接收到80端口的请求后强制跳转到443端口

原配置文件:

server {
    listen 80;
    listen      443 ssl;
    server_name jhxblog.cn www.jhxblog.cn;

       # ssl证书地址
    xxx

    # ssl验证相关配置
    xxx

    location / {
        root    /data/xbblog/view/build;
        index index.html index.htm;
		try_files $uri $uri/  /index.html;
    }
xxx
}

更改后的配置文件

server {
    listen      443 ssl;
    server_name jhxblog.cn www.jhxblog.cn;

       # ssl证书地址
    xxx

    # ssl验证相关配置
    xxx

    location / {
        root    /data/xbblog/view/build;
        index index.html index.htm;
		try_files $uri $uri/  /index.html;
    }
xxx
}
server {
   listen       80;
   server_name  jhxblog.cn www.jhxblog.cn;
   return 301 https://$server_name$request_uri;
}

原文链接: https://www.jhxblog.cn/#/home/read?articleid=31

<think>好的,我现在需要帮助用户解决Nginx配置SSL证书并设置证书密码的问题。首先,我需要回顾用户提供的引用内容,确保回答准确。用户提到了三个引用,其中引用1讨论了如何获取SSL证书,引用2和3详细描述了Nginx配置步骤,包括证书路径、端口监听和SSL参数设置。用户的问题有两个部分:添加SSL证书和设置证书密码。 首先,关于配置SSL证书,根据引用2和3,Nginx需要监听443端口,指定证书和私钥文件的路径,并配置SSL协议和加密套件。用户可能需要知道如何编辑配置文件,特别是证书和密钥的路径设置是否正确。此外,引用3提到证书的域名必须与申请时的域名一致,这点需要注意。 接下来是设置证书密码的问题。Nginx的私钥文件通常在生成时会被加密,需要密码。但引用中并没有直接提到如何在Nginx配置中处理密码。通常,私钥密码需要在Nginx启动时输入,或者通过解密私钥文件避免每次输入。例如,使用OpenSSL移除密码,但这样会降低安全性。用户可能需要了解这两种方法的步骤和权衡。 另外,用户可能遇到配置错误,比如证书路径错误、权限问题或端口冲突。需要提醒用户检查日志文件,使用nginx -t测试配置,以及防火墙设置是否允许443端口。 最后,生成相关问题时要考虑用户可能的后续疑问,比如证书续期、性能优化、强制HTTPS跳转等。这些问题可以帮助用户进一步巩固配置并优化服务器设置。 总结步骤:获取证书配置NginxSSL部分、处理私钥密码、测试和重启服务、验证配置。需要确保每个步骤清晰,并强调安全注意事项,比如定期更新证书和避免私钥泄露。</think>### 如何在Nginx配置SSL证书并设置证书密码 #### **一、配置SSL证书的步骤** 1. **获取SSL证书** 需准备证书文件(`.crt`或`.pem`)和私钥文件(`.key`)。可通过以下方式获取: - **免费证书**:如Let's Encrypt,有效期较短(90天),需定期续期[^1]。 - **付费证书**:如Comodo、Symantec,提供更长的有效期和技术支持[^1]。 2. **上传证书文件到服务器** 将证书文件(如`domain.crt`)和私钥文件(如`domain.key`)上传至Nginx服务器的目录,例如`/etc/nginx/cert/`。 3. **修改Nginx配置文件** 在站点配置文件(如`/etc/nginx/conf.d/ssl.conf`)中添加以下内容: ```nginx server { listen 443 ssl; # 监听443端口并启用SSL server_name example.com; # 替换为你的域名 ssl_certificate /etc/nginx/cert/domain.crt; # 证书路径 ssl_certificate_key /etc/nginx/cert/domain.key; # 私钥路径 # SSL协议与加密套件配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 其他配置(如反向代理、静态资源等) location / { root /var/www/html; index index.html; } } ``` 关键参数说明: - `ssl_certificate`:证书文件路径,需与申请时的域名匹配[^3]。 - `ssl_certificate_key`:私钥文件路径。 - `ssl_protocols`:指定支持的TLS协议版本(推荐仅启用TLSv1.2+)[^3]。 4. **重启Nginx服务** ```bash sudo nginx -t # 测试配置文件语法 sudo systemctl restart nginx # 重启服务 ``` --- #### **二、设置证书密码的方法** 私钥文件(`.key`)在生成时可能被加密保护,需通过以下步骤处理密码: 1. **生成加密的私钥** 使用OpenSSL生成带密码的私钥: ```bash openssl genpkey -algorithm RSA -aes256 -out domain.key ``` 系统会提示输入密码(如`your_password`)。 2. **在Nginx配置密码** **方法一:启动时手动输入密码** 每次重启Nginx时需输入私钥密码,但会导致服务无法自动启动。 **方法二:解密私钥(不推荐)** 移除私钥密码以提高便利性(安全性降低): ```bash openssl rsa -in domain_encrypted.key -out domain_decrypted.key ``` 修改Nginx配置指向解密后的私钥: ```nginx ssl_certificate_key /etc/nginx/cert/domain_decrypted.key; ``` --- #### **三、验证与调试** 1. **检查HTTPS访问** 访问`https://example.com`,确认浏览器显示锁标志且无证书错误。 2. **查看Nginx错误日志** ```bash tail -f /var/log/nginx/error.log ``` 常见错误: - 证书路径错误:`SSL: cannot load certificate` - 私钥密码错误:`SSL: error:0909006C:PEM routines:get_name:no start line` 3. **使用OpenSSL测试** ```bash openssl s_client -connect example.com:443 ``` 确认输出中显示证书链和协议版本。 --- #### **四、安全建议** 1. 定期更新证书(尤其是Let's Encrypt免费证书)[^1]。 2. 避免私钥文件泄露,设置文件权限为`600`: ```bash chmod 600 /etc/nginx/cert/* ``` 3. 启用HTTPHTTPS的强制跳转: ```nginx server { listen 80; server_name example.com; return 301 https://$host$request_uri; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

举个锤子²³³³

有钱的捧个钱场,没钱的借去

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值