一、Nginx服务基础
1.1、关于Nginx
概述:
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师lgor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx相较于Apache\lighttpd具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。在Linux操作系统下,nginx使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于Epoll的高效事件模型kqueue.
- —款高性能、轻量级Web服务软件
■稳定性高
■系统资源消耗低
■对HTTP并发连接的处理能力高
单台物理服务器可支持30 000~50 000个并发请求
1.2、安装Nginx
现在我们开始安装Nginx
- 首先我们用 Xftp(或者用别的传输工具) 把 Nginx软件包放到 /opt 目录下;然后进行解压 Nginx
root@localhost opt]# cd /opt
root@localhost opt]# tar xzvf nginx-1.15.9.tar.gz
[root@localhost nginx-1.15.9]# useradd -M -s /bin/nologin nginx
- 然后安装环境和需要的模块
[root@localhost opt]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel
[root@localhost opt]# cd nginx-1.15.9/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
[root@localhost opt]# make -j3 && make install ## 进行安装编译
- 现在做优化路径
##为了使 Nginx 服务器的运行更加方便, 可以为主程序 nginx 创建链接文件, 以便管理员
直接执行 "nginx" 命令就可以调用Nginx的主程序
[root@localhost nginx-1.15.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.15.9]# ls -l /usr/local/sbin/nginx
[root@localhost nginx-1.15.9]# nginx -t ### 检查配置文件
- 启动、重新配置、停止Nginx
[root@localhost nginx-1.15.9]# nginx ## 启动 Nginx
[root@localhost nginx-1.15.9]# netstat -anpt |grep nginx ## 过滤Nginx的进程
[root@localhost ~]# yum -y install psmisc ###最小安装没有killall令需要安装
[root@localhost ~]# killall -s HUP nginx ## 重载Nginx配置文件(相当于刷新)
[root@localhost ~]# killall -s QUIT nginx ## 退出 Nginx
- 为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写基于CentOs 7.6的
Nginx服务控制文件使用systemctl工具来进行管理.CentOS7.6系统的管理习惯
[root@localhost ~]# vi /lib/systemd/system/nginx.service
[Unit]
Description=nginx ###描述
After=network.target ####描述服务类别
[Service]
Type=forking ###后台运行形式
PIDFile=/usr/local/nginx/logs/nginx.pid ###PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx ###启动服务
ExecReload=/usr/bin/kill -s HUP $MAINPID ###根据PID重载配置
ExecStop=/usr/bin/kill -s QUIT $MAINPID ###根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target
==>> wq 保存
[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
[root@localhost ~]# systemctl start nginx ## 这样我们就可以用这种方法来开启 Nginx 了
- 安装好之后启动服务,在浏览器输入IP,出现这个画面,服务成功启动!
1.3、Nginx访问状态统计
概述:
nginx内置了 http_stub_status 状态统计模块,用来反馈当前的Web访问情况,配置编译参数时可添加
--with-http_stub_status_module 来启用此模块支持,可使用命令 /usr/local/nginx/sbin/nginx -V 来查看已安装的nginx是否包含 http_stub_status 模块。
要使用 nginx 的状态统计功能,除了启用内建模块,还需要修改nginx.conf 配置文件,指定访问位置并添加 stub_status 配置代码
1.3.1、Nginx访问状态统计实验
- 首先我们先进入 Nginx 的配置文件中
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
- 改好之后 wq 保存,然后用 Nginx -t 查看语法有无报错。如果没有错误,再刷新配置文件
[root@localhost ~]# killall -s HUP nginx ## 表示重载配置(刷新的意思)
- 重载配置文件,在浏览器输入 20.0.0.25/status ,出现如下界面
配置生效后,来浏览器中访问 Nginx 服务器的 /status 网站位置,可以看到当前的状态统计信息。如下图所示
1、Active connections 表示当前的活动连接数
2、server accepts handled requests 表示已经处理的连接信息,
3、三个数字以此表示 :
已处理的连接数 6、成功的TCP握手次数 6、已处理的请求数 4
二、Nginx访问控制
概述:
Nginx与Apahce一样,可以实现基于用户授权的访问控制,当客户端想要访问相应网
站或者目录时,要求用户输入用户名和密码才能正常访问,配置步骤与Apache基本一致
2.1、Nginx访问控制实验
适用场景:
当公司的一个部门建立了一个基于nginx的网站,只想让本部门的人登录,不让别的部门的人登录,可以使用基于授权的访问控制
- 先安装 httpd-tools
[root@localhost ~]# yum -y install httpd-tools
- 创建用户 test 并设置密码 12345
[root@localhost ~]# htpasswd -c /usr/local/nginx/.passwd.db test
New password:
Re-type new password:
Adding password for user test
- 修改文件权限
[root@localhost ~]# chmod 400 /usr/local/nginx/.passwd.db ## 修改密码文件的权限为400
[root@localhost ~]# chown nginx /usr/local/nginx/.passwd.db
将所有者修改为 nginx ,设置nginx的运行用户能够读取
- 查看存放用户名和密码的文件
[root@localhost ~]# cd /usr/local/nginx/
[root@localhost nginx]# cat .passwd.db ##查看存放用户名和密码的文件
test:$apr1$vHVaACQT$i1sRjEd2M59E4EJfpxliA.
- 修改配置文件,添加认证配置
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf ##修改配置文件
添加
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
==>> wq 保存
[root@localhost ~]# nginx -t ##检测语法
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# killall -s HUP nginx ## 重启服务
- 验证
在浏览器输入 20.0.0.25 测试 授权访问控制。
出现这个就代表成功了,然后输入刚才设置的用户名和密码
点击登陆后 出现 welcome to nginx!
2.2、基于客户端的访问控制
- 通过客户端IP地址,决定是否允许对页面访问
- 配置规则
■deny lP/IP段:拒绝某个IP或IP段的客户端访问
■allow IP/IP段:允许某个IP或IP段的客户端访问
■规则从上往下执行,如匹配则停止,不再往下匹配
2.2.1、基于客户端的访问控制实验
-
实验:除主机20.0.0.1之外允许其他客户端访问
-
首先进入配置文件
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
deny 20.0.0.1;
allow all;
==>> wq 保存
- 进行验证
[root@localhost ~]# killall -s HUP nginx ##重载配置文件
在浏览器输入 20.0.0.25 ,登陆不了
三、Nginx虚拟主机
概述:
利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程,虚拟主机提供了在同一台服务器,同一组 Nginx进程上运行多个网站的功能。跟Apache一样,Nginx也可以配置多种类型的虚拟主机,分别是基于IP的虚拟主机、基于域名的虚拟主机、基于端口的虚拟主机。
使用Nginx搭建虚拟主机服务器时,每个虚拟Web站点拥有的“serverf”配置段,各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。
- Nginx支持的虚拟主机
■基于域名的虚拟主机
■基于IP的虚拟主机
■基于端口的虚拟主机
3.1、基于域名的虚拟主机
- 我们要先改 hosts 映射,这边我们手动更改。
1、C:\Windows\System32\drivers\etc 先找到hosts文件,然后在桌面复制一份
2、用记事本打开桌面复制的那份,在最底下更改映射。
3、保存到桌面,然后把 .txt 后缀名给删掉,选择 “是”
再覆盖到原来的目录里面,让其生效
4、打开cmd 在测试下,是否生效
5、我们进去把原配置文件的 server 全部打上 # 号注释掉
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
7、然后添加新的server配置文件
## 第一部分
server {
listen 80;
server_name www.51xit.com;
charset utf-8;
access_log logs/www.51xit.com.access.log;
location /{
root /var/www/html/51xit;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = 50.html{
root html;
}
}
## 第二部分
server {
listen 80;
server_name www.52xit.com;
charset utf-8;
access_log logs/www.52xit.com.access.log;
location /{
root /var/www/html/52xit;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = 50.html{
root html;
}
}
==>> wq 保存
8、测试语法有无错误
[root@localhost ~]# nginx -t ## 测试一下语法有无错误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# killall -s HUP nginx ## 刷新配置文件
- 进行验证
然后进入浏览器测试 www.51xit.com www.52xit.com,都可以打开,试验成功
3.2、基于IP的虚拟主机
- 适用场景:
一台主机如果有多个IP地址,可以设置每一个IP对应一个站点。主机安装多个网卡有多个IP,这里采用虚拟IP的方式使主机有多个IP
1、我们现在虚拟机增加一张网卡,然后输入nmcli connection,获得新网卡的 UID 信息
我们先把 ens37网卡的UID给复制下来
[root@localhost ~]# nmcli connection
NAME UUID TYPE DEVICE
ens33 a5cbd6d6-af14-46be-8534-b0a38f94ef7b ethernet ens33
Wired connection 1 2397a705-a0fc-319f-9d0c-5287116765f0 ethernet ens37
2、把 ens33 的网卡信息 复制到 ens37
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
3、刷新网络
[root@localhost network-scripts]# systemctl restart network ##改完之后刷新网络
这边有个需要注意: 如果ip addr 查看网卡信息,发现没有改成功,可以 ifdown ens37 关闭网卡,在 ifup ens37 打开网卡
再查看就有了!
然后在真机 测试下 是否可以 ping 通
4、
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
进去修改 IP地址,这就是上面我们做的 基于域名的虚拟主机 做的配置,
改成用红框框中的配置,一个是 192.168.100.25的,一个是 20.0.0.25的
修改IP地址
5、验证
[root@localhost ~]# killall -s HUP nginx ## 刷新配置
然后进浏览器测试一下分别输入
192.168.100.25 和 20.0.0.25。如图所示,试验成功
注意!!!!!
如果输入的两个IP打开的是同一个网址的话,并且配置文件没有错误的情况下!我们需要先
关闭 killall -s QUIT nginx,在开启 nginx,然后再重新刷新配置文件 killall -s HUP nginx ,在用浏览器测试就没有问题了
3.3、基于端口的虚拟主机
- 进行实验
1、将多个端口映射到同一IP地址
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
还是同样的地方,把两个网站的IP改成一样的,然后端口改成不一样的,分别测试一下!
2、检测端口是否运行正常
3、在浏览器输入 20.0.0.25:8888,测试成功
在浏览器输入 20.0.0.25:8000,测试成功
四、本章问题总结
4.1、-bash: netstat: command not found
- 当出现这种问题时,显示没有 netstat,这时候我们进行安装netstat
[root@localhost ~]# yum -y install net-tools
- 在运行就可以了
4.2、-bash: killall: command not found
- 显示没有killall ,我们要进行安装
[root@localhost logs]# yum -y install psmisc
4.3、如何通过配置文件查看Nginx是否关闭
- 这时候就要看 nginx.pid 了
[root@localhost ~]# cd /usr/local/nginx/logs
[root@localhost logs]# ll
- 查看一下 nginx.pid 进程号是 21643
[root@localhost ~]# cat nginx.pid
- 这时候我们在关闭 nginx,再查看 nginx.pid文件 已经没有了
- 再给 nginx 开启,nginx.pid就出现了
[root@localhost ~]# nginx
[root@localhost ~]# ll
- 再查看 nginx.pid 里面的进程号变为了 21651,
说明 nginx.pid 是用来放进程号的,每次关闭之后再开启,进程号都会变
转载:https://blog.csdn.net/m0_46563938/article/details/108419120