配置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

nginx -s reload

4、访问效果

 

posted on 2023-03-07 14:29  uestc2007  阅读(133)  评论(0编辑  收藏  举报

导航