欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

阿里云使用nginx配置实现HTTP到HTTPS(SSL)升级方案

最编程 2024-01-09 08:49:43
...
主要记录下如何将域名从http升级到https,服务器的系统是Linux

1.购买ssl证书

  • 前言:本人服务器和域名都是阿里云买的,所以ssl证书也是直接从阿里云购买,个人开发者免费,每次只能买一年,具体登录阿里云搜索ssl即可购买,购买了以后填写信息完成校验即可

image.png

2.下载证书

  • 填完信息提交成功之后,等待个几分钟,看到证书是已签发状态就可以直接点击最右侧的下载啦,选择nginx的配置

image.png
  • 下载下来以后就是一个压缩包,共有一个.pem结尾和一个.key结尾的文件。

3.配置CA证书

  • 这里默认你已经安装好了nginx,接下来就是配置CA证书,首先在nginx/conf目录下,新建cert文件夹,将刚刚下载的两个文件放入其中

  • 然后找到nginx/conf目录下的nginx.conf文件,找到# HTTPS server这一行,将下面的serve根据你的实际使用需要进行修改

# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。
server {
listen 443 ssl;   #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
server_name localhost;  #将localhost修改为您证书绑定的域名,例如:www.example.com。
root html;     #改为你的项目访问地址
index index.html index.htm;
ssl_certificate cert/domain name.pem;   #将domain name.pem替换成您证书的文件名。
ssl_certificate_key cert/domain name.key;   #将domain name.key替换成您证书的密钥文件名。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置。
ssl_prefer_server_ciphers on;   
location / {
root html;   #站点目录。
index index.html index.htm;   
}
}                     
  • 设置http默认跳转https
server {
 listen 80;
 server_name localhost;   #将localhost修改为您证书绑定的域名,例如:www.example.com。
 rewrite ^(.*)$ https://$host$1 permanent;   #将所有http请求通过rewrite重定向到https。
 location / {
   index index.html index.htm;
}
}
  • 然后保存nginx.conf的文件配置,nginx -s reload重启nginx服务配置

4.遇到[emerg] the "ssl" parameter requires ngx_http_ssl_module的解决办法(主要分为两个,一个nginx/sbin目录为安装好之后的nginx目录下的sbin文件夹内,nginx源码包即nginx-1.9.9文件夹下,当然,每个人的版本可能不一样)

  • 但是在重启的时候遇到了一个报错[emerg] the "ssl" parameter requires ngx_http_ssl_module ,查了下原因,其实也挺简单,因为nginx没有安装ssl模块

  • 在nginx/sbin目录下运行./nginx -V,查看到configure arguments的原有配置为--prefix=/usr/local/nginx,将你获得的原有配置后面加上--with-http_ssl_module,即可

  • 例如我,切换到源码包的位置,进行添加模块的配置./configure --prefix=/usr/local/nginx --with-http_ssl_module

  • 配置完成以后运行make,不建议make install覆盖安装

  • 然后将原本安装好的nginx进行备份,cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

  • 先将之前写的ssl配置注释,然后跑到nginx/sbin目录下,./nginx -s stop,先关闭nginx(切记,要先关闭nginx运行再覆盖,不然会提示文件正忙)

  • 去源码包的位置,cp ./objs/nginx /usr/local/nginx/sbin/,将原本的文件进行覆盖,会询问你是否覆盖,输入一个y敲回车即可

  • 跑到nginx/sbin目录下,./nginx -V查看是否已经添加了ssl模块,如果看到configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module即表示配置完成

  • 遇到nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed的解决办法

  • 在nginx/sbin目录下运行./nginx,然后发现报错了,报错信息为/usr/local/nginx/logs/nginx.pid,解决办法是运行代码/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf,然后在运行重启./nginx -s reload即可,最终完成了https的升级!