nginx开启https

举报
阿弥陀佛001 发表于 2021/10/07 14:59:05 2021/10/07
【摘要】 1、nginx配置 1.1 下载nginx官网下载Nginx软件http://nginx.org,下载网址:http://nginx.org/en/download.htmlNginx 官方提供了三个类型的版本:l Mainline Version:主线版,是最新版,但未经过过多的生产测试。l Stable Version:稳定版,生产环境使用版本。l Legacy Version:老版本...

1、nginx配置

1.1 下载nginx

官网下载Nginx软件http://nginx.org,下载网址:http://nginx.org/en/download.html

image-20211007104648815

Nginx 官方提供了三个类型的版本:
l Mainline Version:主线版,是最新版,但未经过过多的生产测试。
l Stable Version:稳定版,生产环境使用版本。
l Legacy Version:老版本。
我们需要下载的是 Stable Version。其中又分为两种版本:Linux 版与 Windows 版。开发时这两个版本我们都下载。Linux 版用于生产环境,而 Windows 版用于开发测试,选择需要的版本进行下载。

1.2 nginx 源码安装

1、安装 Nginx依赖

nginx是C语言开发,建议在linux上运行,这里使用的是CentOS7作为安装环境。

1.gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc。

yum install -y gcc make automake

2.PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 Perl 兼容的正则表达式库。nginx的
http模块使用Pcre来解析正则表达式,所以需要在linux上安装Pcre库。

yum install -y pcre pcre-devel

注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

3.zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上
安装zlib库。

yum install -y zlib zlib-devel

4.Openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及
SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

yum install -y openssl openssl-devel

5.统一安装依赖环境命令:

yum -y install gcc make automake pcre-devel zlib zlib-devel openssl openssl-devel

2、安装nginx

2.1 创建存放源文件的文件夹

首先在目录/opt下创建apps目录,用于存放源文件以及解压后的文件

2.2 上传Nginx到步骤1创建的目录下
2.3 解压 Nginx
[root@localhost apps]# pwd
/opt/apps
[root@localhost apps]# ls
nginx-1.20.1.tar.gz
[root@localhost apps]# tar -zxvf nginx-1.20.1.tar.gz
[root@localhost apps]# cd nginx-1.20.1
2.4 生成 makefile

在 Nginx 解压目录下运行 make 命令,用于完成编译。但此时会给出提示:没有指定目标,并且没有发现编译文件 makefile。

编译命令 make 需要根据编译文件 makefile 进行编译,所以在编译之前需要先生成编译文件makefile。使用 configure 命令可以生成该文件。

下面是简单配置的命令执行。命令中每一行的最后添加了反斜杠\表示当前命令并未结束,回车不会执行该命令。执行成功后,会给出配置报告。

[root@localhost nginx-1.20.1]# mkdir -p /var/temp/nginx/client
[root@localhost nginx-1.20.1]# pwd
/opt/apps/nginx-1.20.1
[root@localhost nginx-1.20.1]# ./configure \
--prefix=/usr/local/nginx \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--with-http_ssl_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi

配置成功后,再次查看 Nginx 解压目录,发现其中多出了一个文件 Makefile。后面的编译就是依靠该文件进行的。

2.5 编译安装

这是两个命令,make 为编译命令,make install 为安装命令,可以分别执行。这里使用&&将两个命令连接执行,会在前面命令执行成功的前提下才会执行第二个命令。

make && make install

1.3 nginx启动与关闭

1.关闭防火墙命令:

#关闭防火墙,系统重启后还会启动
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor
preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
#禁用防火墙,系统重启后
[root@localhost ~]# systemctl disable firewalld.service
[root@node0 ~]# systemctl list-unit-files |grep firewalld
firewalld.service disabled

2.启动Nginx:运行sbin目录下的nginx命令即可。

[root@localhost ~]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ls
nginx
[root@localhost sbin]# ./nginx
[root@localhost sbin]# ps aux|grep nginx
root 46423 0.0 0.0 40884 800 ? Ss 16:13 0:00 nginx: master process ./nginx
nobody 46424 0.0 0.5 73964 4244 ? S 16:13 0:00 nginx: worker process
root 46426 0.0 0.1 12344 1152 pts/4 S+ 16:13 0:00 grep --color=auto nginx

3.测试

image-20211007110928852

4.关闭nginx

1.立即停止服务:这种方法比较强硬,无论进程是否在工作,都直接停止进程。

[root@localhost sbin]# ./nginx -s stop

2.从容停止服务:这种方法较stop相比就比较温和一些了,需要进程完成当前工作后再停止。

[root@localhost sbin]# ./nginx -s quit

3.killall 方法杀死进程:直接杀死进程,在上面无效的情况下使用,态度强硬,简单粗暴

[root@localhost sbin]# killall nginx

1.4 设置开机自启动

1. 进到系统服务添加路径:

[root@localhost sbin]# cd /usr/lib/systemd/system/
2.建立服务文件nginx.service

注意nginx 的安装路径保持一样: /usr/local/nginx/,将 [Unit] … 到 WantedBy=multi-user.target 的内容全部复制到 创建的 nginx.service 中

[root@node0 system]# vim nginx.service
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
3.添加执行权限

以755的权限保存在目录: /usr/lib/systemd/system

[root@localhost system]# chmod +x nginx.service
4.设置开机自启动

可在任意目录下执行

[root@localhost system]# systemctl enable nginx.service
[root@localhost system]# systemctl list-unit-files |grep nginx
nginx.service   								enabled
5.启动 nginx 命令
启动nginx服务: systemctl start nginx.service
停止开机自启动: systemctl disable nginx.service
查看服务当前状态: systemctl status nginx.service
重新启动服务: systemctl restart nginx.service
查看所有已启动的服务: systemctl list-units --type=service

2、https 服务

1. 生成证书

image-20211007112004407

申请者需要将自己的信息及其公钥放入证书请求中。但在实际操作过程中,所需要提供的是私钥而非公钥,因为它会自动从私钥中提取公钥。另外,还需要将提供的数据进行数字签名(使用单向加密),保证该证书请求文件的完整性和一致性,防止他人盗取后进行篡改,例如黑客将为www.baidu.com所申请的证书请求文件中的公司名改成对方的公司名称,如果能够篡改成功,则签署该证书请求时,所颁发的证书信息中将变成他人信息。

注意:这里使用的是自签的证书,作为测试使用,并不是有效的证书,有效的证书需要去其他地方(某某云)申请。

1.1 创建一个cert文件夹

用来存放证书和服务器私钥

cd /opt/apps
mkdir cert

1.2 进入cert目录下

# 创建服务器私钥,命令会提醒输入一个密码
[root@localhost cert]# openssl genrsa -des3 -out server.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
.............++++
............................................................++++
e is 65537 (0x010001)
Enter pass phrase for server.key:						 # 输入密码
Verifying - Enter pass phrase for server.key:			# 输入密码
[root@localhost cert]# ll
total 4
-rw-------. 1 root root 3311 Sep 2 11:15 server.key

1.3 创建签名请求的证书(CSR)

openssl req -new -key server.key -out server.csr

1.4 加载SSL

使用上述私钥时除去必须的口令(注意,所谓除去,其实就是将必须的私钥密码写入到了私钥文件里面了,更新了原来的私钥文件)

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

1.5 通过openssl的x509指令生成证书文件

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

2、服务配置

如下是在测试的时候使用配置的 nginx.conf 文件,其中 location 中的 proxy_pass http://192.168.70.149:7100 这个 url 是SRD 服务访问地址,端口 7100

image-20211007113103125

配置说明
#user  nobody;
worker_processes  1;
events {
    worker_connections  1024; 
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    # HTTPS server
    server {
    	# 开启 https 服务
        listen       443 ssl;
        # 配置的地址,也就是 域名或ip地址
        server_name  *.*;
		# 生成的证书,如果是在其他地方申请了证书,则将证书下载下来放到cert目录下,然后在这里添加证书文件的名称
        ssl_certificate      /opt/apps/cert/server.crt;
        # 生成的密钥,将申请的有效证书放到cert目录下,该证书包含了crt和key
        ssl_certificate_key  /opt/apps/cert/server.key;
        ssl_session_cache    shared:SSL:5m;
        ssl_session_timeout  10m;
        # 使用的加密方式
        ssl_prefer_server_ciphers  on;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        location / {
    		root   html;
    		index  index.html index.htm;
    		# 填写需要使用 https 服务访问的url
			proxy_pass http://192.168.70.149:7100;
    	}
    }
}

3、测试效果

这里使用的证书是本地测试生成的无效证书,所以显示不安全。

image-20211007114329920

image-20211007114730802

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。