搭建自己的服务器环境之nginx安装以及配置https访问

docker 安装

关于docker的安装,可以参考其他文章或者同系列搭建自己的服务器环境之四安装Docker

# 先创建要挂载的目录
mkdir -p /opt/nginx/conf && mkdir -p /opt/nginx/conf.d && mkdir -p /opt/nginx/html && mkdir -p /opt/nginx/log && mkdir -p /opt/nginx/cert

# 获取镜像
docker pull nginx:stable-perl
 
# 先启动容器,让其在后台运行,这个不重要,主要是将配置文件拷贝出来
docker run -d --name nginx nginx:stable-perl
 
# 将默认配置文件拷贝到宿主机备用
docker cp nginx:/etc/nginx/conf.d /opt/nginx/conf.d
docker cp nginx:/etc/nginx/nginx.conf /opt/nginx/conf
 
# 停掉容器并将其删除
docker stop nginx
docker rm nginx
 
# 挂在宿主机目录启动容器
docker run -d --name nginx -p 80:80 -p 443:443 -v /opt/nginx/log:/var/log/nginx -v /opt/nginx/conf.d:/etc/nginx/conf.d -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/cert:/etc/nginx/cert -v /opt/nginx/html/:/usr/share/nginx/html nginx:stable-perl

挂载目录详解

宿主机容器用处
/opt/nginx/log/var/log/nginx日志文件目录
/opt/nginx/conf.d/etc/nginx/conf.d默认配置文件目录
/opt/nginx/conf/nginx.conf/etc/nginx/nginx.conf核心配置文件
/opt/nginx/html//usr/share/nginx/htmlweb资源目录
/opt/nginx/cert//usr/share/nginx/cert证书文件预留目录

在这里插入图片描述
直接访问ip, 如果服务器80端口是开放的话,将直接能够看到nginx的默认欢迎界面

默认配置测试

自己上传个首页或者文档之类的,测试配置文件和静态资源的访问是否正常

根据上面挂载规则, 将资源放入到宿主机的/opt/nginx/html目录下, 修改/opt/nginx/conf/nginx.conf

user  nginx;
worker_processes  4;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    charset utf-8;
    gzip on;
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    proxy_set_header              X-Scheme $scheme;
    proxy_set_header              X-Forwarded-Proto $scheme;
    proxy_redirect                off;
    proxy_set_header              Host $host;
    proxy_set_header              X-Real-IP $remote_addr;
    proxy_set_header              X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header              Server_Addr $server_addr;
    proxy_set_header              Server_Name $server_name;

    # 项目如果支持websocket 需要在下面的location下配置请求头
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    server {
      listen 80;
      location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        root /usr/share/nginx/html;
        index index.html;
      }
    }
}

再次访问ip,可以看到自定义的首页内容

在这里插入图片描述

配置https

前提

  • 网站要有自己的域名
  • 配置了域名解析
  • 域名实名认证通过
  • 域名备案成功(这一点如果要用443端口则必须要满足,再申请期间可以先用其他端口来测试证书安装)

https://freessl.cn(免费)

填入域名
在这里插入图片描述

邮箱
在这里插入图片描述

安装KeyManager

下载安装步骤省略

填入信息,点击开始生成文件
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mjTYQfxI-1606849939457)(index_files/01e676df-db5d-4797-b55b-d65da58f055e.png)]
浏览器继续操作

dns验证信息操作指南

这里的意思是按照网站的提示到自己的域名解析控制台添加记录, 这样用来证明这个域名确实是自己所有的
在这里插入图片描述

注意记录类型选择TXT, 主机记录和记录值按照浏览器上提示输入然后保存
在这里插入图片描述
在这里插入图片描述
再域名解析控制台配置好之后,回到浏览器点击验证按钮,
在这里插入图片描述

生成之后点击保存到KeyManager, 然后在KeyManager的证书管理即可看到证书信息
在这里插入图片描述
导出证书
在这里插入图片描述
按需选择类型
在这里插入图片描述

导出之后是个压缩文件,包含crt文件和key
在这里插入图片描述
在这里插入图片描述

将证书文件上传到服务器, 这个按照自己实际情况调整路径

#########这个的前提是前面安装nginx的时候确实是挂载的这个目录###############
# 这个是本地windows了,将本地的证书文件上传到服务器
scp www-snowball-fans-nginx-1201223021.zip root@ddf:/opt/nginx/conf/cert

# 再次登录到服务器进行操作
ssh ddf
cd /opt/nginx/conf/cert
# 解压zip
unzip www-snowball-fans-nginx-1201223021.zip

配置nginx部分,参考了阿里云的帮助文档虽然证书不是他的,但配置是相通的呀

这里前提一定要是域名是备案过的,如果购买域名和域名解析以及https配置都挤在一块的话, 这里部署会报错的, 除非把ssl的端口先换成非443的, 然后是可以带端口https访问的。

下面这几篇文章一定要读, 因为下面给出的配置并不一定适合自己的网站, 下面的文章会去解释这一块安全性和兼容性之间的问题

关于加密套件的选择 https://blog.myssl.com/https-security-compatibility-best-practices/#a
https://blog.myssl.com/pci-dss/
https://blog.myssl.com/ssl-and-tls-deployment-best-practices/

user  nginx;
worker_processes  4;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    charset utf-8;
    gzip on;
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    proxy_set_header              X-Scheme $scheme;
    proxy_set_header              X-Forwarded-Proto $scheme;
    proxy_redirect                off;
    proxy_set_header              Host $host;
    proxy_set_header              X-Real-IP $remote_addr;
    proxy_set_header              X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header              Server_Addr $server_addr;
    proxy_set_header              Server_Name $server_name;
    # 项目如果支持websocket 需要在下面的location下配置请求头
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

    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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    # include /etc/nginx/conf.d/*.conf;

    server {
      listen 443 ssl;
      listen 80;
      # 将www.certificatestests.com修改为您证书绑定的域名,例如:www.example.com。如果您购买的是通配符域名证书,要修改为通配符域名,例如:*.aliyun.com。
      server_name www.snowball.fans;
      ssl_certificate /etc/nginx/cert/www.snowball.fans_chain.crt;  #将domain name.pem替换成您证书的文件名称。
      ssl_certificate_key /etc/nginx/cert/www.snowball.fans_key.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.1 TLSv1.2; #使用该协议进行配置。
      ssl_prefer_server_ciphers on;

      location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        root /usr/share/nginx/html;
        index index.html;
      }
   }
}

注意下图的这个错,首先要排除是不是自己的域名还未备案,未备案的话默认这个443端口是无法访问的
在这里插入图片描述

测试时先用别的端口
在这里插入图片描述

下面就安心等待域名备案成功吧

使用https://myssl.com 来测试网站的https安全级别,当然需要知道的是安全级别和兼容性之间是需要有取舍的
在这里插入图片描述

可以看到安全级别是很高的,且更严格的PCI DSS标准也合归
在这里插入图片描述

但是往下看就能可看到了,兼容性是很差的,握手失败的,都是无法兼容使用https的
在这里插入图片描述

总结,关于安全性和兼容性在前面加密套件选择给出的原文链接已经说的很详细了,自己去选择就行了,至此安装结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值