配置nginx https访问
一、按openssl
1、下载
下载地址:https://www.openssl.org/source/old/1.0.2/
2、安装
# 解压 $ tar -zxvf openssl-1.1.1g.tar.gz $ cd openssl-1.1.1g # 添加openssl配置 $ ./config --prefix=/usr/local/openssl # 更新配置 $ ./config -t $ make depend $ make install # 切换目录 $ cd /usr/local $ vi /etc/ld.so.conf # 在/etc/ld.so.conf文件的最后面,添加如下内容: /usr/local/openssl/lib # 执行: $ ldconfig # 添加OPESSL的环境变量 $ vi /etc/profile #看清楚你的openssl/bin在哪里 export OPENSSL=/usr/local/openssl/bin export PATH=$OPENSSL:$PATH:$HOME/bin # 刷新profile 生效 $ source /etc/profile # 安装完毕,检查一下 $ ldd /usr/local/openssl/bin/openssl
3、yum安装openssl相关软件
[root@test nginx]¥ yum -y install openssl*
4、检测openssl是否安装
二、使用openssl创建https的ssl证书
链接:https://pan.baidu.com/s/1tj62l5wN4Id3TYJpgCQP_A
提取码:ta54
1、创建秘钥
[root@edge-02 srs]#openssl genrsa -des3 -out server.key 2048
注意:生成私钥,需要提供一个至少4位,最多1023位的密码。

2、生成CSR(证书签名请求)
[root@edge-02 srs]# openssl req -new -key server.key -out server.csr 说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。 可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书,需要花钱。另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名。
3、删除秘钥中的密码
[root@edge-02 srs]#openssl rsa -in server.key -out server.key 说明:如果不删除密码,在应用加载的时候会出现输入密码进行验证的情况,不方便自动化部署。
4、生成自签名证书
内部或者测试使用,只要忽略证书提醒就可以了。 [root@edge-02 srs]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

5、生成pem格式的公钥
有些服务,需要有pem格式的证书才能正常加载,可以用下面的命令: [root@edge-02 srs]# openssl x509 -in server.crt -out server.pem -outform PEM# 最终生成证书的文件

三、nginx配置ssl证书
1、将证书文件放到指定目录中
mkdir /etc/nginx/ssl/ cp /server.key /etc/nginx/ssl/ cp /server.pem /etc/nginx/ssl/ cp /server.crt /etc/nginx/ssl/
2、配置nginx
vi /etc/nginx/conf.d/admin-ui.conf server { listen 80; #侦听80端口 listen 443 ssl; #侦听443端口,用于SSL server_name dpi.com; # 自己的域名 # 注意证书文件位置,是从/etc/nginx/下开始算起的 ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #CDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; client_max_body_size 1024m; location / { proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 这里写的是我的腾讯云内网地址 proxy_pass http://xx.xx.xx.xx:8080; } } server { listen 80; #侦听80端口 listen 443 ssl; #侦听443端口,用于SSL server_name dpi.test.com; # 自己的域名 # 注意证书文件位置,是从/etc/nginx/下开始算起的 #ssl_certificate /etc/nginx/ssl/server.pem; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; client_max_body_size 1024m; if($scheme = http){ return 301 https://$host$request_uri; } location / { proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://xx.xx.xx.xx:8181; } location ~ /(code|manage|edge){ #root html; #index index.html index.htm; # OPTIONS预检命令,预检命令通过时才发送请求 # 检查请求的类型是不是预检命令 if ($request_method = 'OPTIONS'){ # 指定允许跨域的方法,*代表所有 add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,OPTIONS'; # 预检命令的缓存,如果不缓存每次会发送两次请求 add_header 'Access-Control-Max-Age' 360000; # 带cookie请求需要加上这个字段,并设置为true add_header 'Access-Control-Allow-Credentials' 'true'; # 表示允许这个域跨域调用(客户端发送请求的域名和端口) # $http_origin动态获取请求客户端请求的域 不用*的原因是带cookie的请求不支持*号 add_header 'Access-Control-Allow-Origin' $http_origin; # 表示请求头的字段 动态获取 add_header 'Access-Control-Allow-Headers' $http_access_control_request_headers; add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain; charset=utf-8'; add_header 'Content-Length' 0; return 204; } }
#配置多个域名,如dpi.test.com和dpi.com #同时监听80和443端口,当使用http访问自动跳转到https,根据if($schema ==http)完成 #ssl_certificate配置证书路径 #ssl_certificate_key 配置key路径
3、重启nginx
1 | nginx -s reload |
4、访问效果
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性