阅读 199

Nginx安装安全证书!在Nginx中配置HTTPS的详细分析说明

基本概念

  • Nginx是一款高性能的HTTP和反向代理web服务器,同时提供IMAP,POP3SMTP服务

  • Nginx是一款轻量级的web服务器,反向代理服务器,同时也是IMAP,POP3SMTP电子邮件服务器,在BSD-like协议下运行

  • Nginx的特点是占用内存少,并发能力强

  • Nginx的两个特性:

    • 反向代理

    • 负载均衡

  • Nginx命令:

    • 启动: start nginx

    • 关闭: nginx -s stop

    • 重启: nginx -s reload

  • Nginx使用的是HTTP服务的默认端口80, 所以访问地址不用写端口号

    • 80端口是为超文本传输协议HTTP开放的,因为浏览网页服务默认的端口号都是80, 因此只要输入HTTP地址即可,不需要输入端口号80

  • Nginx使用的端口号在nginx-1.18.0\conf\nginx.conf中配置

  • 使用Nginx配置反向代理域名:

# 设定虚拟主机配置 server { # 监听80端口 listen 80; # 定义服务名,通常和域名相同,多个域名使用逗号隔开 server_name 域名1,域名2; # 编码方式 charset UTF-8; # 配置虚拟主机的访问日志 access_log IP地址; # 配置URL映射 location / { # 监听请求转发的端口,也就是服务端口,通过代理实现 proxy_pass http://127.0.0.1:8888 } } 复制代码

HTTPS证书

  • 安装HTTPS证书的前提是安装好Nginx,Nginx中配置安装HTTPS证书

  • 安装HTTPS证书的两种方式:

    • acme.sh脚本生成

    • 阿里云申请

acme

  • CentOS环境安装acme.sh

安装依赖项

  • 安装acme.sh的主要依赖项socat

yum -q -y install openssl crontabs socat curl 复制代码

  • 安装acme.sh脚本

curl https://get.acme.sh | sh 复制代码

生成证书

  • 使用acme.sh生成证书时,会暂时占用80端口.所以需要关闭nginx以释放占用的80端口,并且保证没有其余的进程占用80端口

  • 关闭nginx

cd /usr/local/nginx/sbin/ ./nginx -s stop 复制代码

  • 使用acme.sh生成HTTPS证书

/root/.acme.sh/acme.sh --issue -d 域名 --standalone --keylength ec-256 --force 复制代码

证书更新

  • 由于Let's Encrypt的证书有效期只有3个月,因此需要90至少更新一次证书

  • acme.sh脚本会每60天自动更新一次证书

  • 可以手动更新证书

/root/.acme.sh/acme.sh --renew -d mydomain.com --force --ecc 复制代码

安装证书和密钥

  • 新建存储证书的文件夹

mkdir /etc/https/ 复制代码

  • 将证书安装到新建的文件夹

/root/.acme.sh/acme.sh --installcert -d 域名 --ecc \ --fullchain-file /etc/https/域名.crt \ --key-file /etc/https/域名.key 复制代码

  • 完成acme.sh安装HTTPS证书

阿里云

  • 阿里云的免费证书的有效期为1年

获取证书

  • 在阿里云官网申请证书成功后,将证书文件的压缩包下载到本地并解压,包括pem文件和key文件

安装证书

伪原创工具 SEO网站优化  https://www.237it.com/ 

  • nginx的目录新建cert文件夹存放证书文件

cd /usr/local/nginx mkdir cert 复制代码

  • 将解压好的pem文件和key文件存放到cert文件夹中

Nginx配置

# 运行用户 user nobody; # 启动进程,通常设置成和CPU数量相等 worker_process 1; # 全局错误日志和PID文件 error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; pid logs/niginx.pid; # 工作模式和连接数上限 events { # use epoll; epoll是多路复用IO,及I/O Multiplexing中的一种方式,仅用于Linux2.6以上的内核,可以大大提高Linux内核的性能 worker_connections 1024; # multi_accept on; } # 设定http服务器,利用反向代理功能提供负载均衡支持 http { # 设定mime类型,类型由mime.type文件定义 include /usr/local/nginx/mime.types; default_type application/octet-stream; # 设定日志显示样式 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指令指定nginx是否调用sendfile函数,使用zero copy方式来输出文件. 对于普通应用,必须设置为on;如果是用于下载的等磁盘IO重负载应用,可以设置为off,这样可以平衡磁盘与网络I/O处理速度,降低系统的uptime sendfile on; # tcp_nopush; # 连接超时时间-keepalive_timeout # keepalive_timeout 0; keepalive_timeout 60; tcp_nodelay on; # 开启gzip压缩 gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; # 设定请求缓冲 client_header_buffer_size 1k; large_client_header_buffers 4 4k; include /usr/local/nginx/conf.d/*.conf; include /usr/local/nginx/site-enabled/*; # 端口转发,80端口跳转到443端口 server { listen 80 default_server; server_name 域名; rewrite ^(.*)$ https://${server_name}$1 permanent; } server { listen 443 ssl; ssl_certificate /etc/https/域名.crt; ssl_certificate_key /etc/https/域名.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; server_name 域名; location / { # 定义服务器的默认网站根目录位置 root /root; # 定义首页索引文件的名称 index index.php index.html index.htm; } # 定义错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root /root; } # 静态文件,Nginx处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/virtual/htdocs; # 过期时间为30天 expired 30d; } # 设定查看Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_asic "NginxStatus"; auth_basic_user_file conf/htpassword; } # 设定禁止访问.htxx文件 location ~ /\.ht { deny all; } # ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- # 设定均衡服务器列表 upstream servers1 { # weight参数表示权重,权重越高,被分配到的几率越大 #本机上的Squid开启3128端口 server 192.168.8.1x:3128 weight=5; server 192.168.8.2x:80 weight=1; server 192.168.8.3x:80 weight=6; } upstream servers2 { # weight参数表示权重,权重越高,被分配到的几率越大 server 192.168.8.x:80 weight=1; server 192.168.8.x:80 weight=6; } # 虚拟服务器 server { # 监听192.168.8.x的80端口 listen 80; server_name 域名; # 对aspx后缀的进行负载均衡配置 location ~.*\.aspx$ { # 定义服务器默认网站根目录位置 root /root; # 定义首页索引文件的名称 index index.php index.html index.htm; # 设置请求转向servers定义的服务器列表 proxy_pass http://servers; # 反向代理相关配置 proxy_redirect off; # 后端的Web服务器可以通过x_forwarded_for获取用户的真实IP proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forward_for; # 允许客户端请求的最大单文件字节数 client_max_body_size 10m; # 缓存区代理缓冲用户端请求的最大字节数 client_body_buffer_size 128k; # 代理连接超时:Nginx于后端服务器连接超时时间 proxy_connect_timeout 90; # 代理发送超时:后端服务器数据回传时间 proxy_send_timeout 90; # 代理接收超时: 连接成功后,后端服务器响应时间 proxy_read_timeout 90; # 设置代理服务器Nginx保存用户头信息的缓存区大小 proxy_buffer_size 4k; # 设置proxy_buffers缓冲区,网页平均在32k以下 proxy_buffers 4 32k; # 设置高负荷下缓冲大小,通常为proxy_buffers与负载均衡服务器数量倍数 proxy_busy_bufffers_size 64k; # 设置缓存文件夹大小,大于这个值,将会从upstream服务器传 proxy_temp_file_write_size 64k; } } } } 复制代码

  • 完成Nginx安装HTTPS证书配置


作者:攻城狮Chova
链接:https://juejin.cn/post/7035104047963045902

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐