nginx部署http和https配置,https转发http

在阿里云购买了域名后,可以免费申请SSL证书,该证书是绑定域名的

阿里云申请免费SSL证书,下载后 解压后有2个文件 xxx.key , xxx.pem

在 nginx/conf 目录下新建 cert,将上面2个文件放入cert ,vi 打开 配置文件

注意:云服务器开启 80 和 443 端口权限,默认是关闭的

下面的server_name 内容的 yourdomain.com 替换你的 域名
下面的xxx替换你自己的内容

注意:配置https时 server_name 一定要设置证书绑定的域名,访问https时用域名去访问,不要用ip地址直接访问,否则https无效

https默认端口(443)配置

https默认端口 即访问https时不写端口默认访问443

注意:云服务器安全组开放443端口权限

    # HTTPS server
    server {
        listen 443 ssl;
        #配置HTTPS的默认访问端口为443。
        #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
        #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
        server_name *.yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
        root /opt/www_80/xxx;
#       index index.html index.htm;
        ssl_certificate cert/xxx.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。
        ssl_certificate_key cert/xxx.key; #需要将cert-file-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; #表示使用的TLS协议的类型
        ssl_prefer_server_ciphers on;
        location / {
#               root   html;
                index index.html index.htm;
         }
    }

http默认端口(80) 重定向 https默认端口(443)

注意:云服务器安全组开放443和80端口权限

    server {
        listen       80;
        server_name  *.yourdomain.com;

        rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    }

https端口 转发给内部http端口

注意:云服务器安全组开放18080 和 8082端口权限

    #HTTPS server
    server {
        listen 18080 ssl;
        server_name *.yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。

        ssl_certificate cert/xxx.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。
        ssl_certificate_key cert/xxx.key; #需要将cert-file-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; #表示使用的TLS协议的类型
        ssl_prefer_server_ciphers on;
        location / {
            # 转发到 http 服务器中
            proxy_pass http://localhost:8082;
            #proxy_redirect http:// https://;
            #add_header         Cache-Control    no-store;
            #proxy_set_header   Host             $host;
            #proxy_set_header   X-Real-IP        $remote_addr;
            #proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    }

注意:访问时一定要用域名+端口访问,因为证书是绑定了域名的,如果不用域名而是直接用ip当我这个端口,会报安全异常警告的,说白了就是没用上证书,如下:
在这里插入图片描述

上面这个配置重启nginx后,浏览器访问 https://www.yourdomain.com:18080/test 会转发给域名地址内部的http 8080端口
在这里插入图片描述

仅仅http

注意:云服务器安全组开放80端口权限

    server {
        listen       80;
        server_name  *.yourdomain.com;
        root         /opt/www_80/xxx;
        location / {
            index  index.html index.htm;
    }

你可能感兴趣的:(nginx)