CentOS7 安装并配置 Nginx
环境
系统:CentOS7 虚拟机
网卡模式:NAT
IP: 172.20.1.66
Nginx 的两种安装方式
- 源码包安装:有点繁琐,但是服务性能好。(推荐)
- Yum 安装:简单方便,不易出错。
Nginx 源码包安装
安装依赖
- 安装 gcc 环境
nginx 编译时依赖 gcc 环境
yum -y install gcc gcc-c++
- 安装 pcre
让 nginx 支持重写功能
yum -y install pcre pcre-devel
- 安装 openssl 和 zlib
yum -y install openssl openssl-devel zlib zlib-devel
以上安装完成后,进行 nginx 安装。
Nginx 安装
- 下载源码包
wget https://nginx.org/download/nginx-1.20.2.tar.gz -P /opt/software/server
- 解压
cd /opt/software/server
tar -zvxf nginx-1.20.2.tar.gz
- 检查平台安装环境
--prefix=/usr/local/nginx 是 nginx 编译安装的目录(推荐),安装完后会在此目录下生成相关文件,相关配置文件也在此目录
cd nginx-1.20.2
./configure --prefix=/usr/local/nginx
如果前面的依赖库都安装成功后,执行 ./configure --prefix=/usr/local/nginx
命令会显示一些环境信息。如果出现错误,一般是依赖库没有安装完成,可按照错误提示信息进行所缺的依赖库安装。
- 编译安装
make && make install
- 设置 nginx 软链接
安装成功后 nginx 程序路径为/usr/local/nginx/sbin/nginx
链接到/usr/local/bin
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin
Nginx 常用命令
- 启动服务
nginx
- 重新加载服务
nginx -s reload
- 停止服务
nginx -s stop
- 查看服务进程
ps -ef | grep nginx
- 检查 Nginx 配置是否正确
nginx -t
Yum 源安装
使用 yum 进行 Nginx 安装时,Nginx 配置文件在
/etc/nginx
目录下
yum -y install nginx
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
Nigix 多配置文件
主配置文件
nginx.conf
中指定包含其他扩展配置文件,从而简化 Nginx 主配置文件,实现多个站点功能,方便配置文件的维护
- 创建子配置目录
cd /usr/local/nginx/conf
mkdir vhost
- 引入在主配置文件的
http
模块中引入子配置目录
vim nginx.conf
添加以下内容
# 匹配vhost目录下的所有.conf文件
include vhost/*.conf;
- 网站目录
设我的网站目录为 /www/www.test.com
mkdir -p /www/www.test.com
# 往首页增加一点内容
echo "<h1> Test </h1>" > /www/www.test.com/index.html
- 在
vhost
编写配置文件
vim vhost/www.test.com.conf
写入以下内容
server {
# 监听端口
listen 80;
# 虚拟主机的名称
server_name www.test.com;
location / {
# 项目目录
root /www/www.test.com;
index index.html index.htm;
}
}
- 重启服务
# 检查配置文件
nginx -t
# 重新加载
nginx -s reload
- 宿主机或其他机器添加 host
想要其他机器访问当前 nginx 服务器配置的域名,需要将域名添加到 host 文件中只指向 nginx 服务器的 ip
172.20.1.66 www.test.com
添加后即可访问 http://www.test.com
案例
配置 Host
172.20.1.66 www.kgc.com
172.20.1.66 www.benet.com
基于域名的跳转
现在公司旧域名 www.kgc.com 有业务需求变更,需要使用新域名 www.benet.com 代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。
- 创建网站目录 www.benet.com
mkdir -p /www/www.benet.com
echo "<h1>I am www.benet.com </h1>" > /www/www.benet.com/index.html
- 创建 www.benet.com.conf 配置文件
cd /usr/local/nginx/conf/vhost
vim www.benet.com.conf
内容为:
server {
# 监听端口
listen 80;
# 虚拟主机的名称
server_name www.benet.com;
location / {
# 项目目录
root /www/www.benet.com;
index index.html index.htm;
}
}
- 创建 www.kgc.com.conf 配置文件
cd /usr/local/nginx/conf/vhost
vim www.kgc.com.conf
内容为:
server {
listen 80;
server_name www.kgc.com;
location / {
if ($host = 'www.kgc.com'){
# $1为正则匹配的内容,即域名后边的字符串
rewrite ^/(.*)$ http://www.benet.com/$1 permanent;
}
}
}
- 重新加载 nginx
nginx -t
nginx -s reload
基于客户端 IP 访问跳转
今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :172.20.1.67 访问正常。
- 建立维护页面
vim /www/www.benet.com/maintain.html
添加以下内容
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<h1>网站升级维护中,请稍后访问!</h1>
</body>
</html>
- 新建虚拟机 172.20.1.67 (公司IP)
如果你有多台则不需要新建,仅用于测试公司 ip 访问
添加 host
echo "172.20.1.66 www.benet.com" >> /etc/hosts
- 修改
www.benet.com.conf
配置文件
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;
}
}
- 重新加载 nginx
nginx -t
ngunx -s reload
- 测试访问
- IP:172.20.1.1 其他IP
-
IP: 172.20.1.67 公司IP
这台虚拟机没有安装桌面,则用
curl
测试,如果你安装桌面在浏览器访问即可curl www.benet.com