因为客户需求,需要把原来的http换成https,还不能影像原来http的访问。

看了许多网上的资料,经过实践。我总结下相关步骤及怎么配置的。

第一步,把http换成https这里需要ssl证书

ssl证书生成,我接触的有2种免费方式。

第一种通过安装 OpenSSL(创建证书)。

优点:ssl证书生成简单

缺点:最后成功配置了该证书,http换成https。但是各浏览器是不承认该证书的,也会出现不安全的提示

示例:

对于我来说,太low了

第二种方式在阿里云上申请免费证书,有效期只有一年。各浏览器是承认该安全证书的。

萝卜蔬菜各有所爱。

如果你很懒,   OpenSSL创建的通用证书已经给你创建好了,直接下载使用

链接:  OpenSSL生成的ssl证书-WindowsServer文档类资源-CSDN下载

第一种通过  OpenSSL(创建证书)。

下载地址:Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions

下载完成安装到 C:\OpenSSL-Win64 配置环境变量 在path变量后需要加入 %OPENSSL_HOME%

4.生成证书

在你的nginx下创建ssl文件夹 用于存放证书

 打开服务器的cmd,进入到nginx下创建ssl文件夹下

运行证书生成命令:

openssl genrsa -des3 -out zs.key 2048

 创建安全秘钥,安全秘钥输自己能记得到的。

 再次输入自己刚才的秘钥。

创建 csr 证书

再次输入命令:

openssl req -new -key zs.key -out zs.csr

后面的内容按enter键跳过

这就创建完成了。这就是刚生成的证书

 第二种通过阿里云平台生成证书

申请证书地址:https://yundun.console.aliyun.com/?spm=5176.12818093.ProductAndResource--ali--widget-product-recent.dre3.3be916d02OjeeC&p=cas#/certExtend/free

登录上阿里云后跳转至证书申请页面

 

 后面会把相关的信息发到你的邮件里,根据邮件的步骤生成证书就可以了

我申请下来的证书,和openssl生成的证书有点差异,单不影响结果:

 证书已经生成了,现在就是nginx配置了

nginx配置(必须对外开通443端口,互联网可以访问该端口 )

如果有原http访问项目的相关配置了,先别去动它。再创建一个nginx配置,免得把以前的项目搞砸了,如果对ssl不是很懂的话。配置没有问题了再把原的nginx干掉。

nginx.conf配置(这个是有原nginx项目配置的环境下,重新建的一个nginx 取名nginxssl):

#user nobody;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

#隐藏nginx版本

server_tokens off;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

# '$status $body_bytes_sent "$http_referer" '

# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#文件压缩

gzip on;

gzip_disable "msie6";

gzip_proxied any;

gzip_min_length 1k;

gzip_comp_level 4;

gzip_types text/plain application/x-javascript application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

# another virtual host using mix of IP-, name-, and port-based configuration

#

#server {

# listen 8000;

# listen somename:8080;

# server_name somename alias another.alias;

# location / {

# root html;

# index index.html index.htm;

# }

#}

# HTTPS server

#

server {

listen 443 ssl;

#填写你的域名或ip 多个用空格分开

server_name www.xxx.com 221.237.182.xxx;

#证书路径配置 我这里用的阿里云申请的证书 D:/soft/nginxssl/ssl/zs.csr

ssl_certificate D:/soft/nginxssl/ssl/8935916.pem;

#证书路径配置 我这里用的阿里云申请的证书 D:/soft/nginxssl/ssl/zs.key

ssl_certificate_key D:/soft/nginxssl/ssl/8935916.key;

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers on;

client_max_body_size 20M;#控制该server的所有请求报文大小

#后台接口访问配置

location ^~ /api {

proxy_pass http://localhost:8080/api;

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

#前端项目默认访问配置

location / {

root D:/soft/webfile/dist-jeeplus-ssl;

index index.html index.htm;

autoindex off;

if (!-e $request_filename) {

rewrite ^(.*)$ /index.html?s=$1 last;

break;

}

}

#前端项目分流访问配置

location /ph {

alias D:/soft/webfile/dist-phone-ssl;

index index.html index.htm;

autoindex off;

}

}

}

nginx.conf配置(没有原nginx项目配置的环境下):

#user nobody;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

#隐藏nginx版本

server_tokens off;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

# '$status $body_bytes_sent "$http_referer" '

# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#文件压缩

gzip on;

gzip_disable "msie6";

gzip_proxied any;

gzip_min_length 1k;

gzip_comp_level 4;

gzip_types text/plain application/x-javascript application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

#HTTP配置

server {

listen 80;

#填写绑定证书的域名

server_name www.xxx.com;

#(第一种)把http的域名请求转成https 保留一种

return 301 https://$host$request_uri;

#(第二种)强制将http的URL重写成https 保留一种

rewrite ^(.*) https://$server_name$1 permanent;

}

#HTTPS使用SSL访问的配置

#

server {

listen 443 ssl;

#填写你的域名或ip 多个用空格分开

server_name www.xxx.com 221.237.182.xxx;

#证书路径配置 我这里用的阿里云申请的证书 D:/soft/nginxssl/ssl/zs.csr

ssl_certificate D:/soft/nginxssl/ssl/8935916.pem;

#证书路径配置 我这里用的阿里云申请的证书 D:/soft/nginxssl/ssl/zs.key

ssl_certificate_key D:/soft/nginxssl/ssl/8935916.key;

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers on;

client_max_body_size 20M;#控制该server的所有请求报文大小

#后台接口访问配置

location ^~ /api {

proxy_pass http://localhost:8080/api;

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

#前端项目默认访问配置

location / {

root D:/soft/webfile/dist-jeeplus-ssl;

index index.html index.htm;

autoindex off;

if (!-e $request_filename) {

rewrite ^(.*)$ /index.html?s=$1 last;

break;

}

}

#前端项目分流访问配置

location /ph {

alias D:/soft/webfile/dist-phone-ssl;

index index.html index.htm;

autoindex off;

}

}

}

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。