Warning : Trying to access array offset on value of type bool in
/www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/inc/theme_plus.php on line
286
一,Nginx的概述
产生背景:Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,Nginx是由伊戈尔·赛索耶夫为俄罗斯 访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日
应用:Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如prtl,php等,但是不支持java。java程序只能通过Tomcat配合完成,Nginx专为性能优化而开发,性能是最重要的考量,实现上非常注重效率,能经受高负载的考验,它支持的并发连接数达50000
nginx做为HTTP服务器,有以下几项基本特性:
处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.
无缓存的反向代理加速,简单的负载均衡和容错.
FastCGI,简单的负载均衡和容错.
模块化的结构。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。
支持SSL 和 TLSSNI.
Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。就稳定性而言,nginx比lighthttpd更胜一筹。
二,nginx的架构
一,Nginx整体架构
Nginx在启动后,会有两进程,最基本有master process(主进程)和worker process(工作进程),类似于主从reactor线程模型,主从结构实现同步非堵塞,提供并发哪里
master进程主要用来管理worker进程,包含:接收客户端的信号,向各worker进程发送指令,监控worker进程的运行状态,当worker进程退出后(异常情况),会重新启动新的worker进程
worker进程则负责处理基本的网络事件,多个worker进程之间是对等的,它们同等竞争来自客户端的请求,各进程互相之间是独立的,一个请求,只可能在worker进程中处理,master进程不负责具体的客户端处理,worker可以设置多个,一般会设置与机器cpu核数一致
二,Nginx的核心进程模型
启动nginx的主进程将充当监控进程,通过fork()出来的子进程则充当worker进程,nginx也可以单进程模型执行,在这种进程模型下,主进程就是工作进程,没有监控进程
三,master进程
监控进程充当整个进程组与用户的交互接口,同时对进程进行监护。它不需要处理网络事件,不负责业务的执行,只会通过管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能
master进程中for(::)无限循环内有一个关键的sigsuspend()函数调用,该函数调用是的master进程的大部分时间都处于挂起状态,直到master进程收到信号为止。
master进程通过检查一下7个标志位来决定ngx_master_process_cycle方法的运行:
sig_atomic_t ngx_reap;
sig_atomic_t ngx_terminate;
sig_atomic_t ngx_quit;
sig_atomic_t ngx_reconfigure;
sig_atomic_t ngx_reopen;
sig_atomic_t ngx_change_binary;
sig_atomic_t ngx_noaccept;
信号
对应进程中的全局标志位变量
意义
QUIT
ngx_quit
优雅地关闭整个服务
TERM或INT
ngx_terminate
强制关闭整个服务
USR1
ngx_reopen
重新打开服务中的所有文件
WINCH
ngx_noaccept
所有子进程不再接受处理新的连接,实际相当于对所有子进程发送QUIT信号
USR2
ngx_change_binary
平滑升级到新版本的Nginx程序
HUP
ng_reconfigure
重读配置文件
CHLD
ngx_reap
有子进程以外结束,需要监控所有子进程
四,worker进程
worker进程的主要任务是完成具体的任务逻辑。其主要关注点是与客户端或后端真实服务器(此时nginx作为中间代理)之间的数据可读/可写等I/O交互事件,所以工作进程的阻塞点是在像select()、epoll_wait()等这样的I/O多路复用函数调用处,以等待发生数据可读/写事件。当然也可能被新收到的进程信号中断 master进程如何通通知worker进程去做某些工作呢?采用的是信号当收到信号时,信号处理函数ngx_signal_handler()就会执行
对于worker进程的工作方法ngx_worker_process_cycle来说,它主要关注4个全局标志位:
sig_atomic_t ngx_terminate;//强制关闭进程
sig_atomic_t ngx_quit;//优雅地关闭进程(有唯一一段代码会设置它,就是接受到QUIT信号。ngx_quit只有在首次设置为1,时,才会将ngx_exiting置为1)
ngx_uint_t ngx_exiting;//退出进程标志位
sig_atomic_t ngx_reopen;//重新打开所有文件
其中ngx_terminate、ngx_quit、ngx_reopen都将由ngx_signal_handler根据接受到的信号来设置。ngx_exiting标志位仅由ngx_worker_cycle方法在退出时作为标志位使用。
三,正向代理和反向代理(插述)
通俗的说正向代理就是代理客户端,反向代理就是代理服务器端
一,直连访问
直连访问:用户通过浏览器直接通过域名访问目标服务器,不通过中间代理的方式
二,正向代理
Nginx不仅可以做反向代理,实现负载均衡,还可以做正向代理进行上网等功能
正向代理:在Internet广域网中有很多服务器他们分别有对于的域名,那么局域网中的客户端要通过域名访问服务器,需要通过中间代理服务器来访问目标服务器,这种代理方式叫做正向代理(客户端代理)
三,反向代理
客户端对反向代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是反向代理服务器地址,隐藏了真实服务器IP地址
反向代理:对服务器端的代理,对客户端的请求进行服务器端的转发
四,Nginx的安装(两种方式)
一,源码安装
一,下载Nginx
下载地址:https://nginx.org/
下载版本:1.18(自选)
二,安装Nginx
一,Nginx的依赖文件
Nginx运行前需要安装四个依赖
一,GCC编译器
Nginx是使用C语言编写的程序,因此想要运行Nginx就必须先进行编译,GCC就是一个开源的C语言编译器集合,可以用于各种各样的语言,其中就包含C语言
安装命令:yun -y install gcc
安装成功后,可以通过gcc --version来查看gcc是否安装成功
二,PCRE
Nginx在编译过程中需要使用到PCRE库(兼容正则表达式的库),因为在Nginx的Rewrite模块和http核心模块都会使用到PCRE正则表达式语法
安装命令:yum -y install pcre pcre-devel
安装后通过rpm -qa pcre pcre-devel查看是否安装成功
三,zlib
zlib库提供了开发人员的压缩算法,在Nginx的各个模块中需要使用gzip压缩,所以我们也需要提取安装其库及源代码zlib和zlib-devel
安装命令:yum -y install zlib zlib-devel
安装后通过rpm -qa zlib zlib-devel查看是否安装成功
四,OpenSSL
OpenSSL是一个开源代码的安全通信软件库包,应用程序可以使用这个包进行安全通信,并且避免被窃听
SSL:secure Socket Layel 安全套接协议的缩写,可以在Internet上提供秘密性传输,其目标是保证两个应用间通信的保密性和可靠性,在Nginx中,如果服务器需要提供安全网页时就需要用到OpenSSL库,所以我们需要对OpenSSL的库文件及它的开发安装包进行一个安装
安装命令:yum -y install openssl openssl-devel
安装后通过rpm -qa openssl openssl-devel查看是否安装成功
一条命令全部安装:yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
二,安装nginx
① Nginx文件压缩包上传
注:用wget 网络url 的方式下载就跳过
上传方式:
② 解压
命令:tar -zxvf 压缩包
③ 进入解压目录运行configure进行配置加载
ngonx目录中有一个可执行文件configure,它可以检查配置和将配置进行加载初始
④ 执行GCC中的make命令将nginx进行编译安装
命令:make install
⑤ 启动nginx
nginx make安装默认的启动目录:/usr/local/nginx/sbin
⑥ 浏览器查看nginx
关闭防火墙:systemctl stop firewalld
直接输入IP地址访问,不需要加端口号
二,二进制包安装
使用源码包进行简单安装,安装过程比较繁琐,需要提前安装GCC编译器,PCRE兼容正则表达式库,zlib压缩库,OpenSSL安全通信软件包,然后才能安装nginx,使用官方提供的二进制包yum安装方式就可以避免这些麻烦
① 安装yum工具包
命令:install -y yum-utils
② 添加nginx安装配置到yum源文件
新建源文件:couth /etc/yum.repos.d/nginx.repo
添加内容:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
③ 执行安装命令
命令:yum install nginx
④ 查找启动文件并启动
查询系统中与nginx相关的目录:whereis nginx
找到目录启动nginx即可
三,安装后的目录结构
Nginx通过make编译安装后,默认的安装在/usr/local/nginx目录下
_temp结尾的文件:启动nginx时,产生的临时文件
conf:nginx的配置文件
html:存放页面文件
logs:日志文件
sbin:启动文件
一,conf文件目录
CGI(Common Gateway interface)通用网关接口,主要解决的问题是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用CGI程序处理及相应结果给客户端的一种标准规范
fastcgi,uwcgi,scgi都是实现了CGI网关接口的一些性能比较高的协议
1,fastcgi相关配置文件
fastcgi.conf:fastcgi主配置文件
fastcgi.conf.default:fastcgi的备份文件
fastcgi_parems:fastcgi参数文件
fastcgi_parems_default:fastcgi参数备份文件
2, scgi相关配置文件
3, uwcgi相关配置文件
uwcgi_params:uwcgi的相关参数文件
uwcgi_params_default:参数备份文件
4,编解码转化相关文件
5,mime配置
mime文件记录了文件后缀名和mime类型的关系,通过mime可以对文件进行识别
mime.type:mime配置文件
mime.type.default:备份文件
6,nginx核心配置文件
nginx.conf:nginx的核心配置文件
nginx.conf.default:核心配置文件的备份
二,html静态页面文件目录
这个目录只有两个文件
index.html:访问nginx成功出现的页面
50x.html:访问nginx报错出现的页面
三,logs日志目录
access.log:访问日志
error.log:错误日志
nginx.pid:nginx进程PID
四,sbin可执行目录
这个目录只有一个nginx的运行文件
五,Nginx的控制操作
Nginx有两种控制操作方法:
服务信号控制:获取master的PID进程号,通过kill向进程发送命令
命令行控制:就是nginx的命令操作
注:两种方式本质上都是向master发送指令,master分发给worker进行执行
一,服务信号控制
服务器信号控制需要获取服务的PID(两种方式):
通过ps -ef | grep nginx命令
在/usr/local/nginx/logs/nginx.pid文件中查看
信号指令:
信号
作用
TERM/INT
直接关闭整个服务
QUIT
处理完现有请求后的关闭整个服务
HUP
重新配置文件并使用服务对新配置项生效
USR1
重新打开日志文件,可以用来进行日志切割
USR2
平滑升级到升级到最新版的nginx(热部署升级)
WINCH
所有的子进程不再接收处理新连接,相当于worker进程发送QUIT指令
平滑升级:是一种热部署升级在不影响nginx提供服务的同时对nginx进行升级,
平滑升级的具体细节:发送USR2信号给master进程,告诉master需要进行平滑升级,这个时候,会重新开启对应的master进程和worker进程,整个系统中将会有两个master进程,并且新的master进程的PID会被记录到/usr/local/nginx/logs/nginx.pid文件中,而之前旧的master进程PID则会被记录在/usr/local/nginx/logs/nginx.oldbin文件中,接着再发送QUIT信号给旧的master进程,让其处理完请求后进行关闭
控制方式:kill -signal PID
注:signal就是信号,PID为Nginx的进程ID
例:
1,QUIT关闭服务(kill -QUIT PID)
2,HUP重新启动配置文件(kill -HUP PID)
3,WINCH关闭work进程,使nginx不能提供具体服务(kill -WINCH PID)
4,USR2平滑升级(kill -USR2 PID)
二,命令行控制操作
命令行操作通过nginx启动项提供的参数进行操作
参数:
-h:打印帮助信息
-v:打印版本号信息
-V:打印版本号信息和配置信息
-t:测试nginx的配置文件语法是否正确
-T:测试nginx的配置文件语法是否正确并列出用到的配置文件信息
-q:再配置测试期间禁止显示非错误信息
-p:指定Nginx的prefix路径(默认为:/usr/local/nginx)
-c:指定Nginx的配置文件路径(默认为:conf/nginx.conf)
-g:用来补充Nginx的配置文件,向Nginx服务指定启动时应用全局的配置
-s:signal信号,后面可以跟
stop:快速关闭
quit:"优雅"的关闭
reopen:重新打开日志文件类似于USR1信号的作用
reload:类似于HUP的作用
不演示
三,服务的升级(插述)
如果想对Nginx的版本进行更新,或者要应用一些新的模块,最简单的做法就是停止当前的Nginx服务,然后开启新的Nginx服务,然后开启新的Nginx服务,但是这会导致在一段时间内Nginx无法提供服务,为了解决这个问题,我们就需要用到Nginx服务器提供平滑升级功能,这个也是Nginx的一大特点,使用这个方式,就可以使Nginx在不停止服务的同时进行升级
平滑升级有两种实现方式:
使用Nginx信号控制来实现(USR2)
使用Nginx安装目录的make命令完成升级
注:两种方式底层都是通过信号来控制升级的
案例:Nginx最开始使用的版本是Nginx-1.14.2,由于服务升级,需要将Nginx的版本升级到Nginx-1.16.1并要求服务不能中断
环境准备:
先安装两个版本的Nginx分别是1.14和1.16
使用Nginx源码安装的方式将1.14安装成功并访问
方式一:使用Nginx服务信号进行升级
1,将1.14版本的sbin目录下的nginx执行文件进行备份
cd /usr/local/nginx/sbin //进入默认安装位置
cp nginx nginxold
2,将Nginx1.16安装目录编译后的objs目录下的nginx文件,拷贝到原来的/usr/local/nginx/sbin目录下
cd /home/nginx/objs //进入编译后源文件的objs中,这个目录是我的安装目录(可能你安装的不一样)
cp nginx /usr/local/nginx/sbin
3,发送信号USR2给Nginx的1.14版本对应的master进程
kill -USR2 'more /usr/local/logs/nginx.pid'
4,发送信号QUIT给Nginx的1.14版本对应的master进程进行关闭
kill -QUIT 'more /usr/local/logs/nginx.pid.oldbin'
方式二:使用Nginx安装目录的make命令完成升级
1,将1.14版本的sbin目录下的nginx执行文件进行备份
cd /usr/local/nginx/sbin //进入默认安装位置
cp nginx nginxold
2,将Nginx1.16安装目录编译后的objs目录下的nginx文件,拷贝到原来的/usr/local/nginx/sbin目录下
cd /home/nginx/objs //进入编译后源文件的objs中,这个目录是我的安装目录(可能你安装的不一样)
cp nginx /usr/local/nginx/sbin
3,进入到安装目录,执行make upgrade
4,查看版本是否被更新
./nginx -V
六,Nginx核心配置文件(nginx.conf [重点])
Nginx核心配置文件分为三大块:
全局块:从配置开始到event块之间的内容,可以配置一些全局生效的配置,比如nginx启动用户,nginx的worke_press个数
events块:主要涉及nginx服务器与客户端的网络连接,常用的设置包括是否开启work process网络序列化,选取那种事件驱动模型来处理连接请求,支持最大连接数
http块:nginx服务配置最主要的一个部分,它包含代理,缓存,日志等功能以及第三方配置
http块包含两部分:
http全局块:http全局块配置的指令包括文件引入,MIME-TYPE定义,日志自定义,连接超时时间等
server块:server块和虚拟主机密切相关,在server块中配置虚拟主机需要监听的端口,IP或者域名
server块也包名两部分:
全局server块:最常见是配置本地虚拟主机的监听配置和本虚拟主机的名称或IP
location块:这个块主要作用于nginx服务器接收的请求字符串,对虚拟主机名称之外的字符串进行匹配,对特定请求进行处理,如:地址定向,数据缓存,应答控制,第三方模块也在这里进行
注:本质nginx核心配置文件包括5大块,其中一个http块可以包含多个server块,server块也可以包含多个location块
一,全局块配置
一,用户配置
user用于配置运行nginx服务器的worker进程的用户和用户组
语法
user user[group]
默认值
nobody
配置位置
全局块
例:修改nginx的worker进程的所属用户
1,创建用户
useradd wql520;
2,设置用户
user wql520;
3,重启配置
kill -HUP PID 或者 nginx -s reload
4,查看
注:假如修改为普通用户,为root用户的文件比如html目录就没有服务权限
二,工作进程配置
1,master_process指令
master_process:用来指定是否开启工作进程(开发时必须开启)
注:没有worker进程时,master将承担worker的功能
语法
master_process on|off
默认值
master_process on
配置位置
全局块
2,worker_processes指令
worker_processes:用来配置Nginx生成工作进程的数量,这个是nginx服务器实现并发处理的关键
注:理论上worker进程数量越大,可以支持的并发处理量也越多,当事实上这个值的设定是受到服务器自身的限制,建议将改值和CPU的核数保持一致
语法
worker_processes number
默认值
master_process 1
配置位置
全局块
例:填加两个worker进程
1,修改配置文件
worker_processes 3;
master_process no;
2,重启配置
kill -HUP PID 或者 nginx -s reload
3,查看
3,daemon指令
daemon:设置Nginx是否以守护进程的方式启动
注:守护进程是系统的一种后台执行的服务进程,它独立于终端,不会使服务随终端的关闭而关闭
语法
daemon on|off
默认值
daemon on
配置位置
全局块
4,PID指令
pid:配置Nginx当前master进程的进程号ID存储的文件目录(默认在:/usr/local/nginx/conf/nginx.pid)
Nginx中的日志分类分access.log,error.log
语法
pid FilePath
默认值
pid /usr/local/nginx/conf/nginx.pid
配置位置
全局块
三,日志的配置
access.log:用来记录用户所有的访问请求
error.log:记录nginx本身运行时的错误信息,不会记录用户的访问请求
Nginx服务器支持对服务器日志的格式,大小,输出等进行设置,需要使用到两个指令,分别是access_log和log_format指令
1)access_log:用来设置用户访问日志的相关属性
参数:
path:输出日志文件的路径
format:文件格式(这个需要结合log_format,需要它的name)
buffer:文件大小
语法
access_log path[format[buffer=size]]
默认值
access_log logs/access.log combined
配置位置
http块,server块,location块
2)log_format:用来指定日志的输出格式
参数:
name:定义这个日志格式的名称(相当于是一个标注)
escape:具体格式,可以是string也可以json等格式
语法
log_format name [escape=default | json | none] string……
默认值
log_format combined "…"
配置位置
http块,server块,location块
3)error_log用来配置nginx的错误日志存放位置
语法
error_log FilePath[日志级别]
默认值
error_log /usr/local/nginx/logs/error.log
配置位置
全局块,http,server,location
八种日志级别(从低到高):
debug:调试
info:信息
notice:通知
warn:警告
error:错误
crit:临界
alert:警报
emerg:紧急
注:建议设置成info以下的等级,因为会带来大量的磁盘I/O消耗,影响nginx的性能
二,events块配置
events块主要用来配置网络连接
1,accept_mutex指令
accept_mutex:用来设置网络连接序列化
这个配置主要可以解决"惊群"问题,惊群就是在某一时刻,客户端发来一个请求连接,Nginx后台是以多进程的工作模式,多个worker进程会被同时唤醒,争夺一个连接请求,如果每次唤醒的进程太多,就会影响nginx整体的性能,如果将上述accept_mutex设置为on(开启状态),将会对多个Nginx进程接收连接进行序列号,一个个唤醒接收,防止多个进程对连接进行争夺造成资源浪费(这个也不绝对有些需要"惊群"根据具体业务场景来设置)
语法
accept_mutex on|off
默认值
accept_mutex on
配置位置
events块
2,multi_accept指令
multi_accept:用来设置是否允许同时接收多个网络连接
如果multi_accept被禁止了,nginx一个工作进程只能同时接收一个新的连接,否则一个工作进程可以同时接收所有的新连接,一般需要打开提升并发
语法
multi_accept on|off
默认值
multi_accept off
配置位置
events块
3,worker_connections指令
worker_connections:用来配置单个worker进程的最大连接数
这里的连接数不仅仅包括前端用户建立的连接数,还包括有可能的连接数,另外,number值不能大于操作系统支持打开的最大文件句柄数
语法
worker_connections number
默认值
worker_connections 512
配置位置
events块
4,use指令
use:用来设置Nginx服务器选择那种事件驱动来处理网络消息
注:use是nginx优化的重要内容,method选择事件处理模型,有select/poll/kqueue等事件处理方式,使用centos需要在linux2.6以上才能使用poll函数优化nginx
语法
use method
默认值
根据当前系统而定
配置位置
events块
三,http块配置
一,MIME_Type的定义
在浏览器中可以显示的内容有HTML,XML,GIF,PNG等种类繁多的文件格式,浏览器区分这些格式就需要MIME_Type,MIME_Type是网络资源的媒体类型,可以对不同的文件格式进行对照识别,也可以识别前端请求的资源类型
默认MIME文件在/usr/local/nginx/conf/mime.types
include mime.types;
default_type appiclation/octet-stream;
1,default_type指令
default_type:用来配置Nginx响应前端请求默认的MIME类型
只有default_type之前需要引入mime.types文件(include mime.types)
语法
default_type mime-type
默认值
default_type text/plain
配置位置
http块,server块,location块
例:客户端请求某个地址返回指定的文本字符串或者json串,如果逻辑非常简单或者是固定的字符串,那么可以使用nginx快速实现,这样就不要写程序响应了
location /get_text{
default_type text/html;
#返回字符串
return 200 "WQL";
}
location /get_text{
default_type text/html;
#返回json串
return 200 '{"name":""WQL,"sex":"nan"}';
}
二,其他配置指令
一,sendfile指令
sendfile:用来设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能
语法
sendfile on|off
默认值
sendfile off
配置位置
http块,server块,location块
二,keepalive配置
keepalive的产生原因:http是一种无状态协议,客户端向服务器发送一个url请求,服务器响应完毕就会断开连接,假如多个请求同时来,断开连接和重新创建连接会浪费资源
keepalive的作用:告诉服务器在处理完一个请求后,继续保持连接的开启状态,若这个客户端再次发送其他请求,服务器继续使用这个连接来处理,提示效率,但这个连接也不能一直保持,如果多个连接一直保持等待状态,服务器性能也会下降,这个时候需要设置这个超时时间
1)keepalive超时设置
语法
keepalive_timeout time
默认值
keepalive_timeout 75s
配置位置
http块,server块,location块
2)keepalive连接使用次数设置
当连接使用次数使用超过number就会断开
语法
keepalive_requests number
默认值
keepalive_requests 100
配置位置
http块,server块,location块
四,server块配置
一,listen指令
listen:监听端口号
语法
listen address[:port][default_server]…;
listen port [default_server]
默认值
listen *:80 | *.8000
配置位置
server块
listen的设置比较灵活,有多种写法:
1,listen 127.0.0.1:8000; //IP+端口号:监听IP主机的指定端口号
2,listen 127.0.0.1; //IP:监听指定主机IP的所有端口号
3,listen 8000; //监听当前主机的8000端口号
4,listen *:8000; //监听所有主机的8000端口号
default_server参数:将当前的server虚拟主机设置为默认主机,默认主机就是如果访问其他server虚拟主机没有匹配到对应address:port,则会默认被执行,如果没有默认主机,则默认使用第一个server虚拟主机
二,server_name指令
server_name:设置虚拟主机服务器名称
语法
server_name name …;
name (可以设置多个空格隔开)
默认值
server_name "";
配置位置
server块
server_name的值的格式有两种:
使用域名需要的配置:自定义域名是没有官方的DNS服务器授权解析的,我们需要在本地的hosts文件进行本地的域名解析,hosts文件是系统默认的域名解析文件,输入网址系统会默认找到hosts文件看有没有域名解析的IP,如果没有就会去DNS服务器进行域名解析
hosts文件位置:
redhat centos系统:/etc/hosts
windows系统:C:\Windows\System32\drivers\etc\hosts
格式:IP 域名
192.168.40.126 wql.luoqin.ltd
server_name的name多种设置方式:
精准匹配(优先级最高)
通配符匹配(优先级第二)
正则表达式匹配(优先级最低)
配置方式一:精准匹配
精准匹配:输入完整的IP地址或域名
例:
server {
listen 80;
server_name 192.168.50.14 192.168.50.12;
……
}
配置方式二:通配符匹配
通配符匹配:主要使用*作为通配符进行IP和域名匹配
注:通配符不能出现在域名的中间,只能出现在首位两端
例:
server{
listen 80;
server_name *.luoqin.ltd www.luoqin.*;
……
}
错误的通配符匹配:
server{
listen 80;
server_name wql.*.ltd www.luoqin.l*;
……
}
配置方式三:正则表达式匹配
正则表达式内容不写了,
例:
server{
listen 80;
server_name ~\wql\.(\w+)\.luoqin$;
……
}
注:()包裹的正则表达式可以通过$取值,~后面不能加空格
五,location块配置
location本身主要用来设置请求的URL
语法
location [ = | ~ | ~* | ^~ | @ ] url{……}
默认值
-
配置位置
server块,location块
url变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式,那么nginx服务器在搜索匹配location的时候,是先使用不包含正则表达式进行匹配,找到一个匹配度最高的一个,然后再通过包含正则表达式的进行匹配,如果匹配到直接进行访问,匹配不到,就使用刚才匹配度最高的那个location来处理请求
1,不带符号
server{
listen 80;
server_name 127.0.0.1;
location /abc{
default_type text/plain;
return 200 "WQL"
}
}
这种匹配有:
1,http://192.168.12.122/abc
2,http://192.168.12.122/abc?p1=wql
3,http://192.168.12.122/abc/
4,http://192.168.12.122/abcwql
2,带=符号(带=必须精准匹配)
server{
listen 80;
server_name 127.0.0.1;
location =/abc{
default_type text/plain;
return 200 "WQL"
}
}
可以匹配到:
1,http://192.168.12.122/abc
2,http://192.168.12.122/abc?p=wql
匹配不到:
1,http://192.168.12.122/abc/
2,http://192.168.12.122/abcwql
特殊符号:
^~:用于不包含正则表达式url,功能与不加符号的用法一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式匹配
一,请求资源路径配置
一,root指令
root:设置请求的根目录
参数:
path:为Nginx服务器接收请求以后查找资源的根目录路径
语法
root path
默认值
root html
配置位
server块,location块,http块
例:访问服务器usr/local/nginx/html/image文件下的资源
location /images{
root /usr/local/nginx/html
}
访问资源的路径为:
http://192.168.12.12/images/wql.png
二,alias指令
alias:用来更改location的URL
语法
alias path
默认值
alias html
配置位
location块
例:访问服务器usr/local/nginx/html/image文件下的资源
location /images{
#需要加绝对路径
alias /usr/local/nginx/html/images
}
访问资源的路径为:
http://192.168.12.12/images/wql.png
root和alias的区别:
root处理方式:root路径+location路径
alias处理方式:只使用alias路径
如果location路径是以/结尾,则alias也必须是以/结尾,root则没有要求
二,其他指令
一,index指令
index:设置网站的默认首页
index后面可以设置多个首页文件,如果访问的时候没有指定具体的访问资源,则会依次查找,指定找到一个为主
语法
index file……;
默认值
index index.html
配置位
location块,http块,server块
例:
location{
root /usr/local/nginx/html
index index.html wql.html
}
访问该local的时候,可以通过http://ip:port/的方式,不需要任何内容,则默认依次访问index.html和wql.html
二,error_page指令
errror_page:设置网站的错误页面
参数:
语法
error code …[=[response]] url;
默认值
_
配置位
location块,http块,server块
error_page设置的多种方式:
1,具体地址跳转方式
server{
error_page 404 http://wql.luoqin.ltd
}
2,重定向地址方式
server{
error_page 404 /wql.html;
error_page 500 502 503 504 /wql.html;
location =/wql.html{
root html;
} }
3,使用location的@符完成错误信息展示
server{
error_page 404 @wql_error;
location @wql_error{
default_type text/plain;
return 404 "Not Fount page……";
} }
4,可选项=[response]
作用:将对应的状态码更改成另外一个
server{
error_page 404 =200 /wql.html;
location =/wql.html{
root html;
}
}
但返回404找不到资源时,再浏览器上查看状态码依旧是200
注:编写error_page后面的内容,404后面需要加空格,200前面不能加空格
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109