nginx配置文件详解
nginx是一个开源免费的web服务器软件,可以用来搭建一个网站。
nginx是俄罗斯人使用C语言开发的。
nginx是一个模块化的软件。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
nginx中有两种类型,一种是master、一种是worker
2.worker和master的关系
将master杀死之后,worker还在。并且还能访问,此时由worker去监听80端口
将worker杀死之后,master还在,并且master会去创建worker
nginx的模块
1.log
分为error.log和access.log
2.core
3.stub_status:连接访问的次数及状态
4.auth_user模块
5.rewrite:重定向模块
6.limit_conn:限制下载速度
7.limit_req:限制请求的次数
8.realip:获取真实的ip地址
安装
第一步:下载软件包
curl -O http://nginx.org/download/nginx-1.19.2.tar.gz
第二步:解压nginx软件压缩包
tar xf nginx-1.19.2.tar.gz
第三步:进入解压后的文件
cd nginx-1.19.2
第四步:解决依赖关系
yum -y install make gcc pcre-devel zlib-devel openssl openssl-devel
第五步:指定安装的配置,如安装路径、开启的功能等
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
第六步:编译安装
make && make install
nginx配置文件的介绍
nginx配置文件的构成及各部分的作用
一个完整的nginx配置文件结构如下:
main
events{
.....
}
http {
......
upstream name {
.......
}
server {
......
location{
......
}
include /path/nginx/conf.d/*.conf;
}
......
}
可以看到nginx配置文件大致被分成六个部分,分别是main、events、http、upstream、server、location这六个部分。
其中每个部分的作用如下:
main模块
main模块主要是用来对nginx做一些全局设置的,如可以打开的进程数、用户等
user www www; #定义nginx运行的用户和用户组
worker_processes 8; #定义nginx的最大worker数目,一般设置为与cpu的核数一致
error_log /var/log/nginx/error.log info; #定义全局的错误日志类型及日志级别
pid /var/run/nginx.pid; #设置nginx进程文件的位置
worker_rlimit_nofile 65535; #设置一个nginx进程最多可以打开的文件描述符的数目,一般与ulimit -n的值一致
events模块
events模块用来指定nginx的工作模式和单个进程的连接数上限。如:
events {
use epoll; #指定使用epoll模型,可以使用的模型有kqueue、rtsig、epoll、/dev/poll、select、poll,其中
worker_connections 65535; #设置单个进程的最大连接数,默认是1024,最大连接数=连接数*进程数
}
http模块
http模块是配置文件中最核心的部分,它包括了绝大部分http服务器相关属性的设置,如是否使用keepalive、gzip等,还包括upstrem、server等子模块。如:
http {
include mime.types; #文件扩展名与文件类型引射表
include /usr/local/web/nginx/conf-manage/*.conf; #指定可以检测该目录下的所有.conf文件,将其他配置文件嵌入到当前的nginx.conf文件中
default_type application/octet-stream; #设置默认的文件类型
charset utf-8; #设置默认的字符编码
server_names_hash_bucket_size 128; #设置服务器名字的hash表大小
client_body_buffer_size 128k; #设置缓冲区代理缓冲用户端请求的最大字节数
client_max_body_size 10m; #设置客户端请求的最大单文件字节数
sendfile on; #开启高效的文件传输模式,开启之后nginx会调用sendfile函数去传输文件,当I/O负载较大时,建议关闭
autoindex on; #设置开启目录访问权限列表
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络延时
keepalive 65; #设置长连接的持续时间,单位为秒
##gzip设置
gzip on; #表示开启gzip功能,即允许nginx传送.gz类型的压缩文件
}
长连接、短连接的区别:
短连接:每一次访问都要建立三次握手,即将数据传输完毕之后,就进行四次断开
长连接:将数据传输完毕之后,会保留一段时间的连接,保留时间是keepalive定义的,超过该时间之后就断开连接
upstream模块
upstream模块即用来做负载均衡的,定义一个upstream就相当于定义了一个负载均衡器,目前实现负载均衡的算法有4种,即轮询、ip_hash、fair、url_hash方法。
轮询:是nginx默认的负载均衡算法,轮询算法还可以增加每个服务器的权重,一般若服务器的性能或者配置不一样时,会让配置稍好一点的服务器的权重大一些,以此提供更好的服务。轮询方式就是每一台服务器按先后顺序依次访问
ip_hash:ip_hash算法是根据访问后端服务器的ip地址进行处理,每一个ip都会对应一个hash值,因此该方法下同一个ip的访客会固定到一个后端服务器
fair:fair算法时根据页面大小和加载时间长短智能地进行负载均衡,即根据后端服务器的响应时间来分配请求,响应时间短的优先分配,但是nginx默认不支持fair,因此需要用户手动安装,即下在upstream_fair模块,在编译安装的时候使用–add-module=下载模块的绝对路径。
url_hash:usl_hash算法是根据访问后端服务器的url进行处理,使来自同一个url的请求固定到同一个后端服务器,能够大大地提高后端缓存服务器地效率
常用参数有:
1.backup,指定将该服务器作为备用服务器,当所有能用的服务器都down掉后,backup的服务器便会自动提供服务。注意在ip_hash算法下,该参数失效,因为ip地址固定一个服务器
2.weight,指定该服务器在整个后端服务器中的权重。注意在ip_hash算法下,该参数失效,因为设置weight会导致流量不均匀。
3.max_fails,表示允许请求失败的次数
4.fail_timeout,表示在经历max_fails次失败后暂停服务的时间
5.max_conns,表示限制分配给后端服务器处理的最大连接数量,超过该数量后,则不会为该服务器分配新的连接
如:
upsteam upstream.name {
ip_hash; #指定负载均衡算法,不指定则默认为轮询,可以指定为fair、ip_hash、hash $request_uri
server 192.168.0.2;
server 192.168.0.3;
server 192.168.0.5;
}
若需要增加nginx的某项功能,则可以直接用./configure --prefix=原安装路径 --add-module=增加模块的绝对路径,然后执行make进行编译,不能执行make install(会覆盖之前的配置),然后再找到新编译的nginx的执行文件,将其覆盖之前安装的nginx执行文件即可
server模块
server模块是用来定义监听服务器和端口的模块,其基本配置如下:
server {
listen 80; #指定其监听的端口号
server_name test.com; #指定其监听的服务器名字,即当用户访问test.com就会访问被该server监听,然后执行该server的功能
root /usr/local/web/nginx/html;#设置该虚拟主机内web服务的根目录
index index.html index.htm; #设置该虚拟主机内web服务的首页
access_log /usr/local/web/nginx/log/access.log #设置access.log的文件位置
location {
......
}
}
server里面还可以进行很多设置,添加很多功能,如身份验证功能、文件下载功能、流量限制功能、身份验证功能等,具体功能参考官方文档的具体模块即可
location模块
location模块是nginx中可自定义程度最高的模块,主要用来定位和解析url的,通过正则匹配,用户可以通过location实现网页的各种处理
如:
location / {
root /usr/local/web/nginx/html;
index index.php index,html index.htm;
}
此外还可以实现网页的跳转,重定向等功能
location的优先级
首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求
检查配置文件是否正确
[root@centos-8 hxy]# nginx -t
nginx中高级模块
http {
......
###进行下载的流量限制
limit_conn_zone $binary_remote_addr zone=sanchuang:10m;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#增加防盗链的功能
location ~* \.(gif|jpg|png|swf|flv) $ {
root html/hxy;
valid_referers none blocked; #定义有效的引用,http请求包中referer字段
if ($invalid_referer) {
return 404;
}
}
##增加自动下载的功能,即根目录没有首页,也能访问,且发布的是一个下载页面
location =/download {
root html/download;
autoindex on; #开启自动索引功能
auth_basic "sanchaung";
auth_basic_user_file htpasswd;
}
###增加密码和用户名认证的功能以及状态统计功能,用htpasswd命令去生成用户名和密码
location =/scstatus {
root conf;
stub_status;
auth_basic "sanchaung";
auth_basic_user_file htpasswd;
}
}
设置权限验证
htpasswd生成用户名和密码
htpasswd -c /usr/local/hxy_nginx/conf/htpasswd 用户名