nginx安装部署ssl证书,同时支持http与https方式访问

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。

首先,我们一般开发的服务为http服务,并用nginx代理,若要支持https方式访问,则必须要生成并安装ssl证书

1.第一步 生成证书

(1)进入“/usr/local/nginx”目录,执行以下命令,生成RSA密钥。
----须知---
对于CentOS 7.6或CentOS 8.1下通过镜像站RPM包安装的Nginx,请将以下命令中的“/usr/local/nginx”目录替换为“/etc/nginx”。

  cd /usr/local/nginx openssl genrsa -des3 -out server_2048.key 2048

系统提示需要两次输入密码,请设置为相同的密码,完成后会生成server_2048.key文件。 image.png
说明 可通过如下命令实现免密码使用此server_2048.key文件。

   openssl rsa -in server_2048.key -out server_2048.key

image.png
(2)创建服务器证书的申请文件。
openssl req -new -key server_2048.key -out server_2048.csr image.png 输入(1)中设置的密码。Country Name填写为CN,其他选项直接按回车即可。如果已经设置免密码使用server_2048.key文件,则无需输入密码。
(3)重写RSA密钥。

   openssl rsa -in server_2048.key -out server_2048.key

image.png
输入1中设置的密码。如果已经设置免密码使用server_2048.key文件,则无需输入密码。
(4)生成证书。

   openssl x509 -req -days 365 -in server_2048.csr -signkey server_2048.key -out server_2048.crt

image.png

2.第二步 Nginx的ssl模块安装   

ngixn需要支持ssl模块,所以需要需要安装。可参考https://www.jb51.net/server/317094cpp.htm
进入到目录的sbin目录下,输入

   #注意这里是大写的V,小写的只显示版本号    
  ./nginx -V

如果出现 (configure arguments: --with-http_ssl_module), 则已安装(下面的步骤可以跳过,直接进行第五步)。 一般情况下都是不存在ssl模块的,接下来进入到你的解压缩后的nginx目录,注意这里不是nginx安装目录,是解压缩后的目录。

   ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

然后执行

   make 
  #切记不要执行make install,否则会重新安装nginx

接下来使用新的nginx文件替换掉之前安装目录sbin下的nginx,注意这里的替换的时候可以先将之前的文件备份下,停掉nginx服务

  #停止nginx服务
  ./nginx -s stop 
  #替换之前的nginx
   cp /usr/nginx/objs/nginx /usr/local/nginx/sbin

成功之后,进入到nginx安装目录下,查看ssl时候成功

  ./nginx -V   
  #可以看到这里出现了configure arguments: --with-http_ssl_module   证明已经安装成功
3.第三步 配置HTTPS功能 Http功能    

配置HTTPS功能
---须知---
对于CentOS 7.6或CentOS 8.1下通过镜像站RPM包安装的Nginx 1.14.2或Nginx 1.19.3版本,请将以下命令中的“/usr/local/nginx”目录替换为“/etc/nginx”。
(1)打开nginx.conf配置文件

  vim /usr/local/nginx/conf/nginx.conf

(2)按“i”进入编辑模式,修改以下内容。
将“#user nobody;”修改为“user root;”。
将“# HTTPS server”模块下的“#”全部去掉。
将“# HTTPS server”模块下的“listen 443 ssl;”修改为“listen 20000 ssl;”。
将“# HTTPS server”模块下的“ssl_certificate cert.pem;”修改为“ssl_certificate /usr/local/nginx/server_2048.crt;”。
将“# HTTPS server”模块下的“ssl_certificate_key cert.key;”修改为“ssl_certificate_key /usr/local/nginx/server_2048.key;”。
修改后内容:

user  root;
...
# HTTPS server
    #
    server {
   
         listen       20000 ssl;
         server_name  localhost;
         ssl_certificate      /usr/local/nginx/server_2048.crt;
         ssl_certificate_key  /usr/local/nginx/server_2048.key;
         ssl_session_cache    shared:SSL:1m;
         ssl_session_timeout  5m;
         ssl_ciphers  HIGH:!aNULL:!MD5;
         ssl_prefer_server_ciphers  on;
         location / {
   
             root   html;
             index  index.html index.htm;
         }
     }

配置HTTP功能
(1)打开nginx.conf配置文件

vim /usr/local/nginx/conf/nginx.conf

按“i”进入编辑模式,修改以下内容。
将“#user nobody;”修改为“user root;”。
将“http”模块下的“listen 80;”修改为“listen 10000;”。
若您是在CentOS 8.1(7.6)系统下使用RPM方式安装Nginx 1.14.2(1.19.3),那么HTTP功能的listen监测端口需要在“/etc/nginx/conf.d/default.conf”文件中修改。
修改后内容:
user root;
...
http {
include 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        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

server {
    listen       10000;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location /xxhcl {
        proxy_pass http://10.1.1.1:8081; 
        proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header x_real_ipP $remote_addr;
                    proxy_set_header remote_addr $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_http_version 1.1;
                    proxy_connect_timeout 4s;
                    proxy_read_timeout 1200s;
                    proxy_send_timeout 1200s;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "upgrade";

    }
 }

}
...

保存之后重新ngxin即可完成部署,如有问题可查看/logs/下log日志
参考文献https://www.hikunpeng.com/document/detail/zh/kunpengwebs/ecosystemEnable/Nginx/kunpengnginx_02_0016.html

相关文章
|
4月前
|
运维 网络协议 安全
为什么经过IPSec隧道后HTTPS会访问不通?一次隧道环境下的实战分析
本文介绍了一个典型的 HTTPS 无法访问问题的排查过程。问题表现为 HTTP 正常而 HTTPS 无法打开,最终发现是由于 MTU 设置不当导致报文被丢弃。HTTPS 因禁止分片,对 MTU 更敏感。解决方案包括调整 MSS 或中间设备干预。
|
5月前
|
数据采集 Web App开发 iOS开发
解决Python爬虫访问HTTPS资源时Cookie超时问题
解决Python爬虫访问HTTPS资源时Cookie超时问题
|
7月前
|
域名解析 网络协议 网络安全
SSL证书验证全攻略:DNS/HTTP/手动解析怎么选?
SSL证书在网络安全中至关重要,1Panel提供三种验证方式:DNS验证、HTTP验证和手动解析。DNS验证便捷,适合CDN网站;HTTP验证快速,需服务器在线;手动解析灵活,但操作复杂。根据需求选择合适确认方式,定期检查证书状态。
795 2
|
8月前
|
安全 网络安全 数据安全/隐私保护
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
420 3
|
9月前
|
安全 网络协议 网络安全
只有IP地址没有域名,如何实现HTTPS访问?
在仅有IP地址而无域名的情况下,实现HTTPS访问并非不可能。主要挑战包括证书颁发机构(CA)对IP地址的支持有限及浏览器兼容性问题。解决方案有:1) 搭建私有CA为内部IP地址颁发证书;2) 使用支持IP地址的公共CA服务。选择合适的方案需根据需求权衡。具体步骤包括选择证书类型、生成CSR文件、提交并完成验证、安装SSL证书和配置强制HTTPS访问。确保IP地址稳定,并定期维护安全性。 **申请优惠**:访问JoySSL官网并填写注册码“230907”可优惠申请IP地址证书。
1408 5
|
10月前
|
网络安全 开发工具 git
解决 Git 访问 GitHub 时的 SSL 错误
通过上述步骤,可以有效解决 Git 访问 GitHub 时的 SSL 错误。推荐优先更新 CA 证书和正确配置 Git 使用 CA 证书,避免禁用 SSL 验证。如果问题持续,可以切换到 SSH 方式访问 GitHub,确保连接的安全性和稳定性。希望这些内容对您的学习和工作有所帮助。
3214 4
|
11月前
|
存储 应用服务中间件 Linux
nginx配置证书和私钥进行SSL通信验证
nginx配置证书和私钥进行SSL通信验证
513 4
|
SQL Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
在运行一个group by的sql时,抛出以下错误信息: Task with the most failures(4):  -----Task ID:  task_201411191723_723592_m_000004URL:  http://DDS0204.
1104 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Hbase依赖的datanode日志中如果出现如下报错信息:DataXceiverjava.io.EOFException: INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in receiveBlock for block  解决办法:Hbase侧配置的dfs.socket.timeout值过小,与DataNode侧配置的 dfs.socket.timeout的配置不一致,将hbase和datanode的该配置调成大并一致。
925 0