目录
一、介绍和安装
?二、nginx常用命令
三、nginx配置文件解释
四、负载均衡算法策略
五、常用模块介绍
六、nginx和apache的区别
一、介绍和安装
Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
安装方式:
- yum安装:
- 到nginx或者centos的官方去下载nginx的软件包安装,快捷、方便、高效
- 编译安装:
- nginx是用C语言编写的,将源码编译成二进制程序,然后安装,需要自己解决软件之间的依赖关系,还需要指定很多的配置,难度大,可以定制开启需要的功能,指定安装的路径
- 编译安装经典三部曲:
- 编译前的配置:./configure——》会生成一个makefile的方案
- 编译:理解为将源代码编译成二进制程序
- 编译安装:将已经编译好的二进制程序安装(cp)到指定的路径
如何卸载?如何升级nginx?
????????删除安装时指定的目录和PATH;升级重新去编译安装一个新的
安装文件介绍: ?? ??? ?a. conf 存放nginx的配置文件 ?? ??? ?b. html 存放网站的网页的目录 ?? ??? ??? ?i. index.html 网站首页 ?? ??? ?c. logs 存放日志 ?? ??? ?d. sbin 存放nginx的启动程序 ? ? ? ? e./configure --help:查看参数介绍,或者去nginx.org查看
一键编译安装脚本:
#!/bin/bash
#安装依赖
yum install epel-release -y
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make psmisc net-tools lsof vim wget
#新建用户和组
id lilin || useradd lilin -s /sbin/nologin
#下载nginx软件包
mkdir /lilin99 -p
cd /lilin99
wget https://nginx.org/download/nginx-1.21.4.tar.gz
#解压软件
tar -xf nginx-1.21.4.tar.gz
cd nginx-1.21.4
#编译前做好配置
./configure --prefix=/usr/local/sclilin99 --user=lilin --group=lilin --with-http_ssl_module --with-threads --with-http_v2_module --with-http_stub_status_module --with-stream --with-http_gunzip_module
#判断配置是否成功
if (( $? != 0 ));then
echo "编译配置出错,已退出"
exit
fi
#开始编译,启动两个进程,提高速度
make -j 2
#安装
make install
#修改PATH变量,方便执行nginx相关命令
echo "PATH=$PATH:/usr/local/sclilin99/sbin" >> /root/.bashrc
source /root/.bashrc
#停一秒,让上一条命令执行完
sleep 1
#关闭防火墙并设置开机不启动,同时关闭selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
#设置nginx开机自启
chmod +x /etc/rc.d/rc.local
echo "/usr/local/sclilin99/sbin/nginx" >> /etc/rc.local
#修改nginx.conf的配置,例如:端口号、worker进程数、线程数、服务域名
sed -i '/worker_processes/ s/1/4/' /usr/local/sclilin99/conf/nginx.conf
sed -i '/worker_connections/ s/1024/2048/' /usr/local/sclilin99/conf/nginx.conf
sed -i -r '36c \\tlisten 80;' /usr/local/sclilin99/conf/nginx.conf
sed -i -r '37c \\tserver_name www.lilin.com;' /usr/local/sclilin99/conf/nginx.conf
#杀死nginx进程
killall -9 nginx
#启动nginx
/usr/local/sclilin99/sbin/nginx
?二、nginx常用命令
- nginx -s stop:fast shutdown,强制立即关闭服务
- nginx -s quit:granceful shutdown,让正在访问的用户正常访问,并禁止新的用户访问
- nginx -s reload:reloading the configuration file,重新加载配置文件,启用新的进程让用户访问,旧的进程会等用户访问完后关闭,并停止接受新的连接
- conf/nginx.conf是nginx的主配置文件,作用是给nginx进程传递参数
- nginx -t:测试nginx的主配置文件是否有错
- nginx有一个主进程和几个工作进程。主进程的主要目的是读取和评估配置,以及保持工作进程。工作进程对请求进行实际处理。
三、nginx配置文件解释
全局配置(worker processes、user、pid、user nobody)
events{
worker_connections 2048;
}
http{
server{
listen
server_name
access log
format
location / {
root
index
}
}
https{}1version
}
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的:
worker_processes 1;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
第二部分:events块
events {
worker_connections 1024;
}
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:http块
算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http全局块、server 块。
http全局块
http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
四、负载均衡算法策略
a轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,默认情况下所有的服务器的权重值都是1 ,值越大优先级越好(加权轮询),如果后端服务器 down 掉,能自动剔除。
ip_hash 基于客户端的ip地址做负载均衡,相同的ip地址转发到同一个服务器 。ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
fair(第三方) fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
五、常用模块介绍
1、http_ssl_module:实现https认证功能
修改配置文件启用:
?然后浏览器使用绑定的域名去访问进行验证
?
实现http跳转到https页面功能:在http的server块里修改:
2、http_realip_module:负载均衡后让web服务器知道客户端的ip地址
- 在负载均衡器上修改http请求报文头部字段,添加一个X-REAL-IP字段
- 在后端real server上使用set_real_ip_from 192.168.43.2
3、stream:实现四层负载均衡
配置:
worker_processes? 4;
events {
??? worker_connections? 2048;
}
stream {
upstream web_servers {
hash $remote_addr;
server 192.168.43.3:80;
server 192.168.43.4:80;
}
upstream dns_servers {
hash $remote_addr;
server 192.168.43.3:53;
server 192.168.43.4:53;
}
server {
listen 80;
proxy_pass web_servers;
}
server {
listen 54 udp;
proxy_pass dns_servers;
}
}
六、nginx和apache的区别
Nginx是一个基于事件的Web服务器,Apache是一个基于流程的服务器; Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求; Nginx避免子进程的概念,Apache是基于子进程的; Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般; Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件; Nginx支持热部署,Apache不支持热部署; Nginx对于静态文件处理具有更高效率,Apache相对一般; Nginx在反向代理场景具有明显优势,Apache相对一般。
两者最核心的区别在于:Apache是同步多进程模型,一个连接对应一个进程,而Nginx是异步的,多个连接(万级别)可以对应一个进程。
适用场景:一般来说,需要性能要求的web服务,用Nginx;如果不需要性能只求稳定,更考虑Apache;Nginx处理放静态内容比Apache要好,特别是在可承受压力、带宽及资源消耗上都要优于Apache。所以更为通用的方案是,前端Nginx抗并发,后端Apache集群,配合起来会更好。
|