一、Nginx
1、Nginx简介
Nginx("engine x") 是一个高性能的HTTP 和反向代理服务器。Nginx是由 Igor Sysoev 为俄
罗斯访问点开量第二的Rambler.ru 站发的,第一个公开版本0.1.0 发布于2004年10月4日。其将源代码以类BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011 年6 月 1 日,Nginx 1.0.4 发布。
Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,单台物理服务器可支持30000~50000个并发请求。并在一个BSD-like 协议下发行。由俄罗斯的程序设计师 Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,事实上 Nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用Nginx网站用户有:百度 BWS、新浪、网易。腾讯、等。
Tengine:
Tenqine 是由淘宝网发起的 Web 服务器项目。它在 Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网、天猫商城等得到了很好的检验。(可以这样理解:淘宝网拿到了Nginx源代码之后,进行了功能的填充、优化等,然后提交给Nginx官方,但是由于Nginx官方相应慢甚至不响应,加上语言沟通的不顺畅,于是淘宝公司就自己打包,在遵循 GPL 的原则上进行二次开发,于是就出了现在的Tengine 这个版本)
2、简述Nginx和Apache的差异?
Nginx是一个甚于事件的Web服务器,Apache是一个基于流程的服务器;
Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求;
Nginx避免子进程的概念,Apache是基于子进程的;
Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般; Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
Nginx支持热部署,Apache不支持热部署;
Nginx对于静态文件处理具有更高效率,Apache相对一般;
Nginx在反向代理场景具有明显优势,Apache相对一般。
3、检查、启动、重启、停止nginx服务
(1)检查配置文件是否配置正确 :nginx -t
(2)启动nginx 命令:nginx
(3)停止nginx服务:
先查看nginx的PID号 cat /usr/local/nginx/logs/nginx.pid
kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx
killall -s QUIT nginx
(4)重载nginx服务
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx
(5)日志分隔,重新打开日志文件
kill -URS1 <PID号>
(6)平滑升级
kill -USR2 <PID号>
| 信号编号 | 信号名 | 含义 |
| 0 | EXIT | 程序退出时收到该信息 |
| 1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化 |
| 2 | INT | 表示结束进程,但并不是强制,常用的crtl + c组合键发出的就是一个kill -2的信号 |
| 3 | QUIT | 退出 |
| 9 | KILL | 杀死进程,即强制结束进程 |
| 11 | SEGV | 段错误 |
| 15 | TERM | 正常结束进程,是kill命令的默认信号 |
二、安装、升级nginx
1、编译安装nginx
(1)首先安装编译安装需要的软件包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make

(2)设置不能登录nginx的用户
useradd -M -s /sbin/nologin nginx

(3)下载软件包并解压到当前文件夹

(4)编译安装
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

make -j3 && make install

(5)创建一个软连接把nginx映射成系统命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/检查下配置文件 nginx -t

(6)查看nginx检查端口情况和pid号

查看下版本号

(7)检查网页

2、更新nginx
(1)先退出nginx进程

(2)上传软件包并解压到当前文件夹
tar -zxvf nginx-1.20.2.tar.gz

(3)编译安装
[root@localhost opt]# cd /opt/nginx-1.20.2/
[root@localhost nginx-1.20.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make

(4)新旧交替
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/1.12nginx

cp /opt/nginx-1.20.2/objs/nginx /usr/local/nginx/sbin/
(5)到/usr/local/nginx/sbin下查看nginx版本,检出配置文件,启动nginx

测试网页连通性
三、HTTP配置
使用"http()"界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持,以及后面要讲到的虚拟Web主机、PHP解析等一系列设置,其中大部分配置语句都包含在子界定标记“server{ }”内
1、访问状态统计配置
(1)先使用命令/usr/local/nginx/sbin/nginx -V #查看已安装的Nginx是否包含HTTP_STUB_STATUS模块
cat /opt/nginx-1.12.0/auto/options |grep YES #可查看nginx已安装的所有模块

(2)修改nginx.conf配置文件,指定访问位置并添加stub_status配置
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
(3)查看配置文件是否配置正确

(4)重启服务
![]()
(5)验证模块是否开启
打开网页搜索192.168.154.19/status
可curl -s http://192.168.154.19结合awk使用

2、基于授权的访问控制
实验拓扑

(1)、生成用户密码认证文件
yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db zhangsan
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db

(2)、编辑配置文件
vim nginx.conf
添加如下两行
#添加认证配置
auth_basic "secret"; # 设置密码提示框文字信息
auth_basic_user_file /usr/local/nginx/passwd.db;

(3)验证结果
重启服务
![]()
访问页面

3、基于客户端的访问控制
(1)访问控制规则如下:
deny IP/IP 段;拒绝某个IP或IP段的客户端访问。
allow IP/IP段;允许某个IP或IP段的客户端访问。
规则从上往下执行,如果匹配则停止,不再往下匹配。
vim /usr/local/nginx/conf/nginx.conf
允许192.168.154.1通过其他的全部拒绝

测试用192.168.154.1主机还能连通

用20网段的主机就无法连通网页

4、基于域名的Nginx虚拟主机
数据流向

=(1)、为虚拟机主机提供域名解析
echo "192.168.154.19 www.fbc.com www.benet.com" >> /etc/hosts
(2)、为虚拟机主机准备网页文档
[root@fbc conf]# mkdir -p /var/www/html/benet
[root@fbc conf]# mkdir -p /var/www/html/fbc
[root@fbc conf]# echo "<h1>www.fbc.com</h1>" > /var/www/html/fbc/index.html
[root@fbc conf]# echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html
(3)、修改Nginx的配置文件
server {
listen 80;
server_name www.fbc.com;
charset utf-8;
access_log logs/host.access.log;
location / {
root /var/www/html/fbc;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.benet.com;
charset utf-8;
access_log logs/host.access.log;
location / {
root /var/www/html/benet;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
(4)、重启服务并测试



5、基于端口的Nginx虚拟主机
vim nginx.conf
server {
listen 192.168.154.19:8080;
server_name www.fbc.com;
charset utf-8;
access_log logs/host.access.log;
location / {
root /var/www/html/fbc;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 192.168.154.19:8888;
server_name www.benet.com;
charset utf-8;
access_log logs/host.access.log;
location / {
root /var/www/html/benet;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
2、重启服务并验证
浏览器访问192.168.154.19:8080

浏览器访问192.168.154.19:8888
总结
本文主要介绍了Nginx理论知识,Nginx的安装与升级以及Nginx的访问控制。