Nginx实战:编译安装,在线升级,实现多域名 http和 https,自动跳转
Posted njsummer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx实战:编译安装,在线升级,实现多域名 http和 https,自动跳转相关的知识,希望对你有一定的参考价值。
内容概要:编译安装nginx 1.18.0;在线升级到 1.20.2;在1.20.2版本上实现同一个IP地址下,多域名http和https,http自动跳转https。
4.1 Nginx 编译安装
4.1.1 编译安装简介
源码安装需要提前准备标准的编译器,GCC的全称是(GNU Compiler collection),其有GNU开发,并以GPL即LGPL
许可,是自由的类UNIX即苹果电脑Mac OS X操作系统的标准编译器,因为GCC原本只能处理C语言,所以原名为GNU C
语言编译器,后来得到快速发展,可以处理C++,Fortran,pascal,objective-C,java以及Ada等其他语言,此
外还需要Automake工具,以完成自动创建Makefile的工作,Nginx的一些模块需要依赖第三方库,比如: pcre(支
持rewrite),zlib(支持gzip模块)和openssl(支持ssl模块)等。
4.1.2 源码编译安装Nginx 1.18.0
4.1.2.1 编译和安装Nginx 1.18.0
# 优化和准备CentOS8环境:关闭防火墙、关闭SELINUX、同步时间、修改主机名等等
[root@CentOS84-IP08 ]#hostnamectl set-hostname CentOS84-Nginx-IP08
[root@CentOS84-IP08 ]#exit
[root@CentOS84-IP08 ]#systemctl enable --now chronyd.service
# 安装编译依赖包
[root@CentOS84-Nginx-IP08 ]#yum -y install gcc pcre-devel openssl-devel zlib-devel
# 建nginx账户
[root@CentOS84-Nginx-IP08 ]#useradd -s /sbin/nologin nginx
#下载 nginx-1.18.0.tar.gz 源码包,解压
[root@CentOS84-Nginx-IP08 ]#cd /usr/local/src/
[root@CentOS84-Nginx-IP08 ]#wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@CentOS84-Nginx-IP08 ]#
[root@CentOS84-Nginx-IP08 ]#tar xf nginx-1.18.0.tar.gz
[root@CentOS84-Nginx-IP08 ]#ll
total 1016
drwxr-xr-x 8 nginx nginx 158 Apr 21 2020 nginx-1.18.0
-rw-r--r-- 1 root root 1039530 Apr 21 2020 nginx-1.18.0.tar.gz
[root@CentOS84-Nginx-IP08 ]#cd nginx-1.18.0/
[root@CentOS84-Nginx-IP08 ]#pwd
/usr/local/src/nginx-1.18.0
# 准备编译安装配置文件
[root@CentOS84-Nginx-IP08 ]#./configure --prefix=/apps/nginx \\
> --user=nginx \\
> --group=nginx \\
> --with-http_ssl_module \\
> --with-http_v2_module \\
> --with-http_realip_module \\
> --with-http_stub_status_module \\
> --with-http_gzip_static_module \\
> --with-pcre \\
> --with-stream \\
> --with-stream_ssl_module \\
> --with-http_addition_module \\
> --with-http_auth_request_module \\
> --with-http_dav_module \\
> --with-http_flv_module \\
> --with-http_gunzip_module \\
> --with-http_gzip_static_module \\
> --with-http_mp4_module \\
> --with-http_random_index_module \\
> --with-http_realip_module \\
> --with-http_secure_link_module \\
> --with-http_slice_module \\
> --with-http_ssl_module \\
> --with-http_stub_status_module \\
> --with-http_sub_module \\
> --with-http_v2_module \\
> --with-mail \\
> --with-mail_ssl_module
# 查看cpu个数,依据个数用于后面编译
[root@CentOS84-Nginx-IP08 ]#lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
...........
# 开始编译安装
[root@CentOS84-Nginx-IP08 ]#make -j 4 && make install
# 准备专门的Nginx 的安装目录/apps/nginx 并授权
[root@CentOS84-Nginx-IP08 ]#chown -R nginx.nginx /apps/nginx
4.1.2.2 Nginx四个主要的目录
## nginx完成安装以后,有四个主要的目录和下面的文件作用介绍
[root@CentOS84-Nginx-IP08 ]#ll /apps/nginx/
total 0
drwxr-xr-x 2 nginx nginx 333 Mar 25 01:52 conf
drwxr-xr-x 2 nginx nginx 40 Mar 25 01:52 html
drwxr-xr-x 2 nginx nginx 6 Mar 25 01:52 logs
drwxr-xr-x 2 nginx nginx 19 Mar 25 01:52 sbin
root@CentOS84-Nginx-IP08 ]#
conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心的主配置文件,其他的.conf则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件一般都有个样板配置文件,是文件名.default结尾,使用过程中可以参考。
html目录默认是保存nginx服务器的web文件,但是一般生产中都会更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。
logs:用来保存nginx服务器的访问日志、错误日志等日志,logs目录也可以自定义放在其他路径,比如/var/logs/nginx里面。
sbin:保存nginx二进制启动脚本,可以赋不同的参数以实现不同的功能。
4.1.2.3 验证版本及编译参数
# 创建软链接
[root@CentOS84-Nginx-IP08 ]#ls /apps/nginx/sbin/
nginx
[root@CentOS84-Nginx-IP08 ]#ln -s /apps/nginx/sbin/nginx /usr/sbin/
# 查看版本信息 用nginx -V 命令可以看到编译时候的参数,这个在做平滑升级时候需要用到
[root@CentOS84-Nginx-IP08 ]#nginx -v
nginx version: nginx/1.18.0
[root@CentOS84-Nginx-IP08 ]#nginx -V
nginx version: nginx/1.18.0
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-4) (GCC)
built with OpenSSL 1.1.1k FIPS 25 Mar 2021
TLS SNI support enabled
configure arguments: --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module
4.1.2.4 启动Nginx,并测试访问
# 启动和停止 nginx 测试访问 web 界面
[root@CentOS84-Nginx-IP08 ]#nginx
[root@CentOS84-Nginx-IP08 ]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
# 需要特别说明,因为我们直接是用二进制文件程序启动运行nginx的,所以关闭时候需要用下面的命令关闭。
[root@CentOS84-Nginx-IP08 ]#nginx -s stop
访问测试:上面步骤启动好Nginx 后在浏览器内输入 http://192.168.0.8 可以看到下面的页面,说明安装已经成功了
4.1.2.5 创建自启动文件及启动Nginx
#### 因为前面在另外一台 Nginx-IP48 服务器上yum 安装过相同版本的Nginx,将配置文件直接借鉴复制到编译安装的这台服务器上,修改后可以直接使用。
# 查看服务器上的启动文件,编译安装后并不存在
[root@CentOS84-Nginx-IP08 ]#ll /usr/lib/systemd/system/nginx.service
ls: cannot access /usr/lib/systemd/system/nginx.service: No such file or directory
[root@CentOS84-Nginx-IP08 ]#
####################################################################################
# 切换到Nginx-IP48 服务器上,查看yum方式安装的 启动文件,也可以直接复制并在 CentOS84-Nginx-IP08 上用vim 生成这个文件
[root@Nginx-IP48 ]#ll /usr/lib/systemd/system/nginx.service
-rw-r--r-- 1 root root 469 Jan 25 23:25 /usr/lib/systemd/system/nginx.service
[root@Nginx-IP48 ]#cat /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"
[Install]
WantedBy=multi-user.target
[root@Nginx-IP48 ]#
# 将 启动文件nginx.service复制到 CentOS84-Nginx-IP08
[root@Nginx-IP48 ]#scp /usr/lib/systemd/system/nginx.service 192.168.250.8:/usr/lib/systemd/system/nginx.service
The authenticity of host 192.168.250.8 (192.168.250.8) cant be established.
ECDSA key fingerprint is SHA256:WGibMK0eLfGqzsaTJEHUwYyD+RwjH6hlC0ZBURwn7ns.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 192.168.250.8 (ECDSA) to the list of known hosts.
root@192.168.250.8s password:
nginx.service 100% 469 356.3KB/s 00:00
[root@Nginx-IP48 ]#
####################################################################################
# 切换回CentOS84-Nginx-IP08 停掉前面 nginx 直接启动的 nginx 服务
[root@CentOS84-Nginx-IP08 ]#nginx -s stop
[root@CentOS84-Nginx-IP08 ]#ss -ntl
# 按照编译安装的参数,修改好自启动服务文件
[root@CentOS84-Nginx-IP08 ]#vim /usr/lib/systemd/system/nginx.service
[root@CentOS84-Nginx-IP08 ]#cat /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/run/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /apps/nginx/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /apps/nginx/run/nginx.pid)"
[Install]
WantedBy=multi-user.target
# 创建 /apps/nginx/run/ 目录
[root@CentOS84-Nginx-IP08 ]#mkdir /apps/nginx/run/
# 修改配置文件中的 apps/nginx/run/
[root@CentOS84-Nginx-IP08 ]#vim /apps/nginx/conf/nginx.conf
pid /apps/nginx/run/nginx.pid;
# 启动 Nginx 前查看其以上是关于Nginx实战:编译安装,在线升级,实现多域名 http和 https,自动跳转的主要内容,如果未能解决你的问题,请参考以下文章
使用nginx实现基于tcp协议的https协议多域名指向的分别转发功能