CentOS7 安装并配置 Nginx

环境

系统:CentOS7 虚拟机
网卡模式:NAT
IP: 172.20.1.66

Nginx 的两种安装方式

  • 源码包安装:有点繁琐,但是服务性能好。(推荐)
  • Yum 安装:简单方便,不易出错。

Nginx 源码包安装

安装依赖

  1. 安装 gcc 环境

    nginx 编译时依赖 gcc 环境

1
yum -y install gcc gcc-c++
  1. 安装 pcre

    让 nginx 支持重写功能

1
yum -y install pcre pcre-devel
  1. 安装 openssl 和 zlib
    1
    yum -y install openssl openssl-devel zlib zlib-devel 
    以上安装完成后,进行 nginx 安装。

Nginx 安装

  1. 下载源码包
    1
    wget https://nginx.org/download/nginx-1.20.2.tar.gz -P /opt/software/server
  2. 解压
    1
    2
    cd /opt/software/server
    tar -zvxf nginx-1.20.2.tar.gz
  3. 检查平台安装环境

–prefix=/usr/local/nginx 是 nginx 编译安装的目录(推荐),安装完后会在此目录下生成相关文件,相关配置文件也在此目录

1
2
cd nginx-1.20.2
./configure --prefix=/usr/local/nginx

如果前面的依赖库都安装成功后,执行 ./configure --prefix=/usr/local/nginx 命令会显示一些环境信息。如果出现错误,一般是依赖库没有安装完成,可按照错误提示信息进行所缺的依赖库安装。

  1. 编译安装
    1
    make && make install
  2. 设置 nginx 软链接
    安装成功后 nginx 程序路径为 /usr/local/nginx/sbin/nginx 链接到 /usr/local/bin
    1
    ln -s /usr/local/nginx/sbin/nginx /usr/local/bin

Nginx 常用命令

  • 启动服务

    1
    nginx
  • 重新加载服务

    1
    nginx -s reload
  • 停止服务

    1
    nginx -s stop
  • 查看服务进程

    1
    ps -ef | grep nginx 
  • 检查 Nginx 配置是否正确

    1
    nginx -t

Yum 源安装

使用 yum 进行 Nginx 安装时,Nginx 配置文件在 /etc/nginx 目录下

1
yum -y install nginx 

关闭防火墙

1
2
systemctl stop firewalld
systemctl disable firewalld

Nigix 多配置文件

主配置文件 nginx.conf 中指定包含其他扩展配置文件,从而简化 Nginx 主配置文件,实现多个站点功能,方便配置文件的维护

  1. 创建子配置目录
    1
    2
    cd /usr/local/nginx/conf
    mkdir vhost
  2. 引入在主配置文件的 http 模块中引入子配置目录
    vim nginx.conf
    添加以下内容
    1
    2
    # 匹配vhost目录下的所有.conf文件
    include vhost/*.conf;

image-20220510140041335

  1. 网站目录

设我的网站目录为 /www/www.test.com

1
2
3
mkdir -p /www/www.test.com
# 往首页增加一点内容
echo "<h1> Test </h1>" > /www/www.test.com/index.html
  1. vhost 编写配置文件

    1
    vim vhost/www.test.com.conf

    写入以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    server {
    # 监听端口
    listen 80;
    # 虚拟主机的名称
    server_name www.test.com;

    location / {
    # 项目目录
    root /www/www.test.com;
    index index.html index.htm;
    }

    }
  2. 重启服务

1
2
3
4
5
# 检查配置文件
nginx -t

# 重新加载
nginx -s reload
  1. 宿主机或其他机器添加 host
    想要其他机器访问当前 nginx 服务器配置的域名,需要将域名添加到 host 文件中只指向 nginx 服务器的 ip
1
172.20.1.66 www.test.com

添加后即可访问 http://www.test.com

image-20220510143225349

案例

配置 Host

1
2
172.20.1.66 www.kgc.com
172.20.1.66 www.benet.com

基于域名的跳转

现在公司旧域名 www.kgc.com 有业务需求变更,需要使用新域名 www.benet.com 代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。

  1. 创建网站目录 www.benet.com
1
2
mkdir -p /www/www.benet.com
echo "<h1>I am www.benet.com </h1>" > /www/www.benet.com/index.html
  1. 创建 www.benet.com.conf 配置文件

    1
    2
    cd /usr/local/nginx/conf/vhost
    vim www.benet.com.conf

    内容为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    server {
    # 监听端口
    listen 80;
    # 虚拟主机的名称
    server_name www.benet.com;

    location / {
    # 项目目录
    root /www/www.benet.com;
    index index.html index.htm;
    }
    }
  2. 创建 www.kgc.com.conf 配置文件

1
2
cd /usr/local/nginx/conf/vhost
vim www.kgc.com.conf

内容为:

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name www.kgc.com;

location / {
if ($host = 'www.kgc.com'){
# $1为正则匹配的内容,即域名后边的字符串
rewrite ^/(.*)$ http://www.benet.com/$1 permanent;
}
}

}
  1. 重新加载 nginx
    1
    2
    nginx -t
    nginx -s reload

image-20220510150205558

基于客户端 IP 访问跳转

今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :172.20.1.67 访问正常。

  1. 建立维护页面
    1
    vim /www/www.benet.com/maintain.html
    添加以下内容
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    </head>
    <body>
    <h1>网站升级维护中,请稍后访问!</h1>
    </body>
    </html>
  2. 新建虚拟机 172.20.1.67 (公司 IP)

    如果你有多台则不需要新建,仅用于测试公司 ip 访问

添加 host

1
echo "172.20.1.66 www.benet.com" >> /etc/hosts
  1. 修改 www.benet.com.conf 配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    server {
    # 监听端口
    listen 80;
    # 虚拟主机的名称
    server_name www.benet.com;

    # 是否跳转到维护页面
    set $rewrite true;

    # 如果是公司ip 则不跳转
    if ($remote_addr = "172.20.1.67"){
    set $rewrite false;
    }

    # 跳转到维护中页面
    if ($rewrite = true){
    rewrite (.+) /maintain.html;
    }

    location / {
    # 项目目录
    root /www/www.benet.com;
    index index.html index.htm;
    }

    }
  2. 重新加载 nginx

    1
    2
    nginx -t
    ngunx -s reload
  3. 测试访问

  • IP:172.20.1.1 其他 IP

image-20220510155638333

  • IP: 172.20.1.67 公司 IP

    这台虚拟机没有安装桌面,则用 curl 测试,如果你安装桌面在浏览器访问即可

    1
    curl www.benet.com

    image-20220510155837228