一、nginx的安装
首先进行解压
依赖检查
安装依赖性
yum install -y gcc pcre-devel openssl-devel
完成检查后会生成makefile
然后我们进行make、make install 进行安装
这些进行完之后,我们的nginx已经安装成功,nginx的开启非常简单,直接nginx命令就可以开启,开启之后,我们可以通过查看80端口来检查是否开启,也可以ps进行查看进程
进程被占用kill掉
二、nginx配置
1.nginx常用参数
-?,-h : this help
-v : show version and exit-V : show version and configure options then exit # 显示版本和编译参数-t : test configuration and exit # 测试配置文件是否异-T : test configuration, dump it and exit # 测试并打印-q : suppress non-error messages during configuration testing # 静默模式 nginx 命令应用示例:2.4.2.4 Nginx 启动文件-s signal : send signal to a master process: stop, quit, reopen, reload #发送信号 ,reload 信号 会生成新的 worker, 但 master 不会重新生成-p prefix : set prefix path (default: /etc/nginx/) # 指定 Nginx 目录-c filename : set configuration file (default: /etc/nginx/nginx.conf) #配置文件路径-g directives : set global directives out of configuration file # 设置全局指令 , 注意和配置文件不要同时配置 , 否则冲突
2.nginx启动文件
3.nginx 全局参数配置优化
Nginx 的配置文件的组成部分:主配置文件: nginx.conf子配置文件 : include conf.d/*.conffastcgi , uwsgi , scgi 等协议相关的配置文件mime.types :支持的 mime 类型, MIME(Multipurpose Internet Mail Extensions) 多用途互联网邮件扩展类型, MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
主配置文件结构:四部分
main block :主配置段,即全局配置段,对 http,mail 都有效# 事件驱动相关的配置event {...}#http/https 协议相关配置段http {...}# 默认配置文件不包括下面两个块#mail 协议相关配置段mail {...}#stream 服务器相关配置段stream {...}
默认的nginx.conf 配置文件格式说明
# 全局配置端,对全局生效,主要设置 nginx 的启动用户 / 组,启动的工作进程数量,工作模式, Nginx 的 PID 路径,日志路径等。user nginx nginx;worker_processes 1; # 启动工作进程数数量events { #events # 设置快,主要影响 nginx 服务器与用户的网络连接,比如是否允许同时接受多个网络连接,使用哪种事件驱动模型 # 处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。worker_connections 1024; # 设置单个 nginx 工作进程可以接受的最大并发,作为 web 服务器的时候最大并发数为 #worker_connections *worker_processes ,作为反向代理的时候为#(worker_connections * worker_processes)/2} http { #http 块是 Nginx 服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都 # 可以在这设置, http 块可以包含多个 server 块,而一个 server 块中又可以包含多个 location 块,#server 块可以配置文件引入、 MIME-Type 定义、日志自定义、是否启用 sendfile 、连接超时时间和 # 单个链接的请求上限等。include mime.types;default_type application/octet-stream;sendfile on; # 作为 web 服务器的时候打开 sendfile 加快静态文件传输,指定是否使用#sendfile 系统调用来传输文件#sendfile 系统调用在两个文件描述符之间直接传递数据 ( 完全在内核中操作 )# 从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,# 硬盘 >> kernel buffer ( 快速拷贝到 kernelsocketbuffer) >> 协议栈。keepalive_timeout 65; # 长连接超时时间,单位是秒server { # 设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个 location 模块# 比如本虚拟机监听的端口、本虚拟机的名称和 IP 配置,多个server 可以使用一个端口比如都使用 #80 端口提供 web 服务listen 80; # 配置 server 监听的端口server_name localhost; # 本 server 的名称,当访问此名称的时候 nginx 会调用当前 serevr内部的配置进程匹配。location / { #location 其实是 server 的一个指令,为 nginx 服务器提供比较多而且灵活的指令# 都是在 location 中体现的,主要是基于 nginx 接受到的请求字符串# 对用户请求的 UIL 进行匹配,并对特定的指令进行处理# 包括地址重定向、数据缓存和应答控制等功能都是在这部分实现# 另外很多第三方模块的配置也是在 location 模块中配置。root html; # 相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。index index.html index.htm; # 默认的页面文件名称}error_page 500 502 503 504 /50x.html; # 错误页面的文件名称location = /50x.html { #location 处理对应的不同错误码的页面定义到 /50x.html# 这个跟对应其 server 中定义的目录下。root html; # 定义默认页面所在的目录}}# 和邮件相关的配置#mail {# ...# } mail 协议相关配置段#tcp 代理配置, 1.9 版本以上支持#stream {# ...# } stream 服务器相关配置段 3.2 全局配置Main 全局配置段常见的配置指令分类正常运行必备的配置优化性能相关的配置用于调试及定位问题相关的配置事件驱动相关的配置全局配置说明 :# 导入其他路径的配置文件#include /apps/nginx/conf.d/*.conf}
#将Nginx工作进程绑定到指定的CPU核心
3.1 实现 nginx 的高并发配置
#
修改
pam
限制
新建一个
PC web
站点
3.2root 与 alias
root
:指定
web
的家目录,在定义
location
的时候,文件的绝对路径等于
root+location
root
示例:
出现错误
查看日志排错
alias
:定义路径别名,会把访问的路径重新定义到其指定的路径
,
文档映射的另一种机制
;
仅能用于
location
上下文
,
此指令使用较少
alias
示例:
三、location 的详细使用
在一个
server
中
location
配置段可存在多个,用于实现从
uri
到文件系统的路径映射;
ngnix
会根据用户请求的
URI
来检查定义的所有
location
,按一定的优先级找出一个最佳匹配,
而后应用其配置在没有使用正则表达式的时候,
nginx
会先在
server
中的多个
location
选取匹配度最高的一个uri
uri
是用户请求的字符串,即域名后面的
web
文件路径
然后使用该
location
模块中的正则
url
和字符串,如果匹配成功就结束搜索,并使用此
location
处理
此请求。
1.语法
# 语法规则:location [ = | ~ | ~* | ^~ ] uri { ... }= # 用于标准 uri 前,需要请求字串与 uri 精确匹配,大小敏感 , 如果匹配成功就停止向下匹配并立即处理请求^~ # 用于标准 uri 前,表示包含正则表达式 , 并且匹配以指定的正则表达式开头# 对 uri 的最左边部分做匹配检查,不区分字符大小写~ # 用于标准 uri 前,表示包含正则表达式 , 并且区分大小写~* # 用于标准 uri 前,表示包含正则表达式 , 并且不区分大写不带符号 # 匹配起始于此 uri 的所有的 uri\ # 用于标准 uri 前,表示包含正则表达式并且转义字符。可以将 . * ? 等转义为普通符号# 匹配优先级从高到低:=, ^~, ~/~*, 不带符号
1.1匹配案例-优先级
在
server
部分使用
location
配置一个
web
界面,例如:当访问
nginx
服务器的
/logo.jpg
的时候要显示指定
html
文件的内容,精确匹配一般用于匹配组织的
logo
等相对固定的
URL,
匹配优先级最高
精确匹配
logo
1生效
交换位置
说明不加符号优先级高
1.2匹配案例-URI开始
2.Nginx 账户认证功能
由
ngx_http_auth_basic_module
模块提供此功能
3.自定义错误页面
自 定义错误页,同时也可以用指定的响应状态码进行响应
,
可用位置:
http, server, location, if in
location
4.自定义错误日志
Syntax: error_log file [level];Default:error_log logs/error.log error;Context: main, http, mail, stream, server, locationlevel: debug, info, notice, warn, error, crit, alert, emerg
5.检测文件
6.长连接配置
keepalive_timeout timeout [header_timeout]; # 设定保持连接超时时长, 0 表示禁止长连接,默认为 75s# 通常配置在 http 字段作为站点全局配置keepalive_requests 数字 ; # 在一次长连接上所允许请求的资源的最大数量# 默认为 100 次 , 建议适当调大 , 比如 :500
7.作为下载服务器配置
ngx_http_autoindex_module
模块处理以斜杠字符
"/"
结尾的请求,并生成目录列表
,
可以做为下载服务配置使用
相关指令:autoindex on | off; # 自动文件索引功能,默为 offautoindex_exact_size on | off; # 计算文件确切大小(单位 bytes ), off 显示大概大小(单位 K 、M) ,默认 onautoindex_localtime on | off ; # 显示本机时间而非 GMT( 格林威治 ) 时间,默认 offautoindex_format html | xml | json | jsonp; # 显示索引的页面文件风格,默认 htmllimit_rate rate; # 限制响应客户端传输速率 ( 除 GET 和 HEAD 以外的所有方法 ) ,单位B/s,bytes/second , # 默认值 0, 表示无限制 , 此指令由ngx_http_core_module 提供set $limit_rate 4k; # 也可以通变量限速 , 单位 B/s, 同时设置 , 此项优级高 .
四 Nginx 高级配置
4.1 Nginx 状态页
基于
nginx
模块
ngx_http_stub_status_module
实现,
在编译安装
nginx
的时候需要添加编译参数
--with-http_stub_status_module
否则配置完成之后监测会是提示法错误
注意
:
状态页显示的是整个服务器的状态
,
而非虚拟主机的状态
# 配置示例:location /nginx_status {stub_status;auth_basic "auth login";auth_basic_user_file /apps/nginx/conf/.htpasswd;allow 192.168.0.0/16;allow 127.0.0.1;deny all;}# 状态页用于输出 nginx 的基本状态信息:# 输出信息示例:Active connections: 291server accepts handled requests16630948 16630948 31070465上面三个数字分别对应 accepts,handled,requests 三个值Reading: 6 Writing: 179 Waiting: 106Active connections: # 当前处于活动状态的客户端连接数# 包括连接等待空闲连接数 =reading+writing+waitingaccepts : # 统计总值, Nginx 自启动后已经接受的客户端请求连接的总数。handled: # 统计总值, Nginx 自启动后已经处理完成的客户端请求连接总数# 通常等于 accepts ,除非有因 worker_connections 限制等被拒绝的连接requests: # 统计总值, Nginx 自启动后客户端发来的总的请求数 4.2 Nginx 压缩功能Nginx 支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的 IT 支出,不过会占用相应的 CPU 资源。Nginx 对文件的压缩功能是依赖于模块 ngx_http_gzip_module, 默认是内置模块配置指令如下:示例:Reading: # 当前状态,正在读取客户端请求报文首部的连接的连接数# 数值越大 , 说明排队现象严重 , 性能不足Writing: # 当前状态,正在向客户端发送响应报文过程中的连接数 , 数值越大 , 说明访问量很大Waiting: # 当前状态,正在等待客户端发出请求的空闲连接数开启 keep-alive 的情况下 , 这个值等于active –(reading+writing)
4.2 Nginx 压缩功能
Nginx
支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文
件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的
IT
支出,不过会占用相
应的
CPU
资源。
Nginx
对文件的压缩功能是依赖于模块
ngx_http_gzip_module,
默认是内置模块
配置指令如下:
# 启用或禁用 gzip 压缩,默认关闭gzip on | off;# 压缩比由低到高从 1 到 9 ,默认为 1 ,值越高压缩后文件越小,但是消耗 cpu 比较高。基本设定未 4 或者 5gzip_comp_level 4;# 禁用 IE6 gzip 功能,早期的 IE6 之前的版本不支持压缩gzip_disable "MSIE [1-6]\.";#gzip 压缩的最小文件,小于设置值的文件将不会压缩gzip_min_length 1k;# 启用压缩功能时,协议的最小版本,默认 HTTP/1.1gzip_http_version 1.0 | 1.1;# 指定 Nginx 服务需要向服务器申请的缓存空间的个数和大小 , 平台不同 , 默认 :32 4k 或者 16 8k;gzip_buffers number size;# 指明仅对哪些类型的资源执行压缩操作 ; 默认为 gzip_types text/html ,不用显示指定,否则出错gzip_types mime-type ...;# 如果启用压缩,是否在响应报文首部插入 “Vary: Accept-Encoding”, 一般建议打开gzip_vary on | off;# 预压缩,即直接从磁盘找到对应文件的 gz 后缀的式的压缩文件返回给用户,无需消耗服务器 CPU# 注意 : 来自于 ngx_http_gzip_static_module 模块gzip_static on | off;
打开压缩功能并设定
测试
未压缩小于1k
大于1k
4.3 Nginx 变量使用
nginx
的变量可以在配置文件中引用,作为功能判断或者日志等场景使用
变量可以分为内置变量和自定义变量
内置变量是由
nginx
模块自带,通过变量可以获取到众多的与客户端访问相关的值
4.3.1 内置变量
常用内置变量
$remote_addr;# 存放了客户端的地址,注意是客户端的公网 IP$args;# 变量中存放了 URL 中的所有参数# 例如 :https://search.jd.com/Search?keyword= 手机 &enc=utf-8# 返回结果为 : keyword= 手机 &enc=utf-8$is_args# 如果有参数为 ? 否则为空$document_root;# 保存了针对当前资源的请求的系统根目录 , 例如 :/webdata/nginx/timinglee.org/lee 。$document_uri;# 保存了当前请求中不包含参数的 URI ,注意是不包含请求的指令# 比如 :http://lee.timinglee.org/var?\id=11111 会被定义为 /var# 返回结果为 :/var$host;# 存放了请求的 host 名称limit_rate 10240;echo $limit_rate;# 如果 nginx 服务器使用 limit_rate 配置了显示网络速率,则会显示,如果没有设置, 则显示 0$remote_port;# 客户端请求 Nginx 服务器时随机打开的端口,这是每个客户端自己的端口$remote_user;# 已经经过 Auth Basic Module 验证的用户名$request_body_file;# 做反向代理时发给后端服务器的本地资源的名称$request_method; # 请求资源的方式, GET/PUT/DELETE 等$request_filename;# 当前请求的资源文件的磁盘路径,由 root 或 alias 指令与 URI 请求生成的文件绝对路径,# 如 :webdata/nginx/timinglee.org/lee/var/index.html$request_uri;# 包含请求参数的原始 URI ,不包含主机名,相当于 :$document_uri?$args,# 例如: /main/index.do?id=20190221&partner=search$scheme;# 请求的协议,例如 :http , https,ftp 等$server_protocol;# 保存了客户端请求资源使用的协议的版本,例如 :HTTP/1.0 , HTTP/1.1 , HTTP/2.0 等$server_addr;# 保存了服务器的 IP 地址$server_name;# 虚拟主机的主机名$server_port;# 虚拟主机的端口号$http_user_agent;# 客户端浏览器的详细信息$http_cookie;# 客户端的所有 cookie 信息$cookie_<name>#name 为任意请求报文首部字部 cookie 的 key 名$http_<name>#name 为任意请求报文首部字段 , 表示记录请求报文的首部字段, name 的对应的首部字段名需要为小写,如果有横线需要替换为下划线# 示例 :echo $http_user_agent;echo $http_host;$sent_http_<name>#name 为响应报文的首部字段, name 的对应的首部字段名需要为小写,如果有横线需要替换为下划线 , 此变量有问题echo $sent_http_server;$arg_<name># 此变量存放了 URL 中的指定参数, name 为请求 url 中指定的参数echo $arg_id;
实例:
五 Nginx Rewrite 相关功能
Nginx
服务器利用
ngx_http_rewrite_module
模块解析和处理
rewrite
请求
此功能依靠
PCRE(perl compatible regular expression)
,因此编译之前要安装
PCRE
库
rewrite
是
nginx
服务器的重要功能之一,用于实现
URL
的重写,
URL
的重写是非常有用的功能
比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的
链接,就可以设置为访问
另外还可以在一定程度上提高网站的安全性。
5.1 ngx_http_rewrite_module 模块指令
5.1.1 if 指令
用于条件匹配判断,并根据条件判断结果选择不同的
Nginx
配置,可以配置在
server
或
location
块中进行配置,Nginx
的
if
语法仅能使用
if
做单次判断,不支持使用
if else
或者
if elif
这样的多重判断,用法如下:
if
(条件匹配)
{
action
}
使用正则表达式对变量进行匹配,匹配成功时
if
指令认为条件为
true
,否则认为
false
,变量与表达式之间 使用以下符号链接:
= # 比较变量和字符串是否相等,相等时 if 指令认为该条件为 true ,反之为 false!= # 比较变量和字符串是否不相等,不相等时 if 指令认为条件为 true ,反之为 false~ # 区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假!~ # 区分大小写字符 , 判断是否匹配,不满足匹配条件为真,满足匹配条件为假~* # 不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假!~* # 不区分大小字符 , 判断是否匹配,满足匹配条件为假,不满足匹配条件为真-f 和 !-f # 判断请求的文件是否存在和是否不存在-d 和 !-d # 判断请求的目录是否存在和是否不存在-x 和 !-x # 判断文件是否可执行和是否不可执行-e 和 !-e # 判断请求的文件或目录是否存在和是否不存在 ( 包括文件,目录,软链接 )# 注意:# 如果 $ 变量的值为空字符串或 0 ,则 if 指令认为该条件为 false ,其他条件为 true 。#nginx 1.0.1 之前 $ 变量的值如果以 0 开头的任意字符串会返回 false
示例:
5.1.2 break 指令
用于中断当前相同作用域
(location)
中的其他
Nginx
配置
与该指令处于同一作用域的
Nginx
配置中,位于它前面的配置生效
位于后面的
ngx_http_rewrite_module
模块中指令就不再执行
Nginx
服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置,、
该指令可以在
server
块和
locationif
块中使用
使用语法如下:
未加break
加入
5.1.3 return
指令
return
用于完成对请求的处理,并直接向客户端返回响应状态码,比如
:
可以指定重定向
URL(
对于特殊重 定向状态码,301/302
等
)
或者是指定提示文本内容
(
对于特殊状态码
403/500
等
)
,处于此指令后的所有配置都将不被执行,return
可以在
server
、
if
和
location
块进行配置
return code; # 返回给客户端指定的 HTTP 状态码return code [text]; # 返回给客户端的状态码及响应报文的实体内容# 可以调用变量 , 其中 text 如果有空格 , 需要用单或双引号return code URL; # 返回给客户端的 URL 地址
5.2rewrite 案例: break 与 last
5.2.1 break和last区别案例
5.2.2 rewrite案例: 自动跳转 https
案例:基于通信安全考虑公司网站要求全站
https
,因此要求将在不影响用户请求的情况下将
http
请求全
部自动跳转至
https
,另外也可以实现部分
location
跳转
5.2.3rewrite 案例: 判断文件是否存在
案例:当用户访问到公司网站的时输入了一个错误的
URL
,可以将用户重定向至官网首页
5.3 Nginx 防盗链
防盗链基于客户端携带的
referer
实现,
referer
是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名,正常的
referer
信息有以下几种:
none : # 请求报文首部没有 referer 首部,# 比如用户直接在浏览器输入域名访问 web 网站,就没有 referer 信息。blocked : # 请求报文有 referer 首部,但无有效值,比如为空。server_names : #referer 首部中包含本主机名及即 nginx 监听的 server_name 。arbitrary_string : # 自定义指定字符串,但可使用 * 作通配符。示例 : *.timinglee.orgwww.timinglee.*regular expression : # 被指定的正则表达式模式匹配到的字符串 , 要使用 ~ 开头,例如:~.*\.timinglee\.com
5.3.1 实现盗链
在一个
web
站点盗链另一个站点的资源信息,比如
:
图片、视频等
5.3.2 实现防盗链
基于访问安全考虑,
nginx
支持通过
ngx_http_referer_module
模块
,
检查访问请求的
referer
信息是否有效实现防盗链功能
六 Nginx 反向代理功能
反向代理:
reverse proxy
,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。
Nginx
除了可以在企业提供高性能的
web
服务之外,另外还可以将
nginx
本身不具备的请求通过某种预定义的协议转发至其它服务器处理,不同的协议就是Nginx
服务器与其他服务器进行通信的一种规范主要在不同的场景使用以下模块实现不同的功能
ngx_http_proxy_module: # 将客户端的请求以 http 协议转发至指定服务器进行处理ngx_http_upstream_module # 用于定义为 proxy_pass,fastcgi_pass,uwsgi_pass# 等指令引用的后端服务器分组ngx_stream_proxy_module: # 将客户端的请求以 tcp 协议转发至指定服务器处理ngx_http_fastcgi_module: # 将客户端对 php 的请求以 fastcgi 协议转发至指定服务器助理ngx_http_uwsgi_module: # 将客户端对 Python 的请求以 uwsgi 协议转发至指定服务器处理
6.1 实现 http 反向代理
6.1.1 http 协议反向代理
6.1.1.1 反向代理配置参数
proxy_pass; #用来设置将客户端请求转发给的后端服务器的主机
#
可以是主机名
(
将转发至后端服务做为主机头首部
)
、
IP
地址:端口的方式
#
也可以代理到预先设置的主机群组,需要模块
ngx_http_upstream_module
支持
proxy_hide_header field; #
用于
nginx
作为反向代理的时候
#
在返回给客户端
http
响应时
#
隐藏后端服务器相应头部的信息
#
可以设置在
http,server
或
location
块
proxy_pass_header field; #
透传
#
默认
nginx
在响应报文中不传递后端服务器的首部字段
Date, Server, X-Pad, X-Accel
等参数
#
如果要传递的话则要使用
proxy_pass_header field
声明将后端服务器返回的值传递给客户端
#field
首部字段大小不敏感
proxy_pass_request_body on | off;
#
是否向后端服务器发送
HTTP
实体部分
,
可以设置在
http,server
或
location
块,默认即为开启
proxy_pass_request_headers on | off;
#
是否将客户端的请求头部转发给后端服务器,可以设置在
http,server
或
location
块,默认即为开启
proxy_set_header;
6.1.1.2
实战案例
:
反向代理单台
web
服务器
要求:将用户对域
www.timinglee.org
的请求转发给后端服务器处理
#
可更改或添加客户端的请求头部信息内容并转发至后端服务器,比如在后端服务器想要获取客户端的真实
IP
的时候,就要更改每一个报文的头部
proxy_connect_timeout time;
#
配置
nginx
服务器与后端服务器尝试建立连接的超时时间,默认为
60
秒
用法如下:
proxy_connect_timeout 6s;
#60s
为自定义
nginx
与后端服务器建立连接的超时时间
,
超时会返回客户端
504
响应码
proxy_read_timeout time;
#
配置
nginx
服务器向后端服务器或服务器组发起
read
请求后,等待的超时时间,默认
60s
proxy_send_timeout time;
#
配置
nginx
项后端服务器或服务器组发起
write
请求后,等待的超时 时间,默认
60s
proxy_http_version 1.0;
#
用于设置
nginx
提供代理服务的
HTTP
协议的版本,默认
http 1.0
proxy_ignore_client_abort off;
#
当客户端网络中断请求时,
nginx
服务器中断其对后端服务器的请求。即如果此项设置为
on
开启,则服务器、
会忽略客户端中断并一直等着代理服务执行返回,如果设置为
off
,则客户端中断后
Nginx
也会中断客户端请求
并立即记录
499
日志,默认为
off
。
实例:
6.1.1.2 反向代理示例: 缓存功能
缓存功能默认关闭状态
,
需要先动配置才能启用
准备缓存配置
在主配置文件的http中添加
访问验证
6.1.2 http 反向代理负载均衡
默认轮询
添加算法
基于
Cookie
实现会话绑定
无cookie轮询
加入cookie
对值进行hash
6.2 实现 Nginx 四层负载均衡
6.2.1 tcp负载均衡配置参数
tcp的负载均衡要卸载http语句块之外
6.3 实现 FastCGI
6.3.1 FastCGI配置指令
Nginx
基于模块
ngx_http_fastcgi_module
实现通过
fastcgi
协议将指定的客户端请求转发至
php-fpm
处理,其配置指令如下:
fastcgi_pass address:port;# 转发请求到后端服务器, address 为后端的 fastcgi server 的地址,可用位置: location, if inlocationfastcgi_index name;#fastcgi 默认的主页资源,示例: fastcgi_index index.php;fastcgi_param parameter value [if_not_empty];# 设置传递给 FastCGI 服务器的参数值,可以是文本,变量或组合,可用于将 Nginx 的内置变量赋值给自定义keyfastcgi_param REMOTE_ADDR $remote_addr; # 客户端源 IPfastcgi_param REMOTE_PORT $remote_port; # 客户端源端口fastcgi_param SERVER_ADDR $server_addr; # 请求的服务器 IP 地址fastcgi_param SERVER_PORT $server_port; # 请求的服务器端口fastcgi_param SERVER_NAME $server_name; # 请求的 server nameNginx 默认配置示例:location ~ \.php$ {root /scripts;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # 默认脚本路径#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params; # 此文件默认系统已提供 , 存放的相对路径为prefix/conf}
源码编译php
# 解压源码并安装[root@Nginx ~]# ./configure \--prefix=/usr/local/php \ # 安装路径--with-config-file-path=/usr/local/php/etc \ # 指定配置路径--enable-fpm \ # 用 cgi 方式启动程序--with-fpm-user=nginx \ # 指定运行用户身份--with-fpm-group=nginx \--with-curl \ # 打开 curl 浏览器支持 php 相关配置优化--with-iconv \ # 启用 iconv 函数,转换字符编码--with-mhash \ #mhash 加密方式扩展库--with-zlib \ # 支持 zlib 库,用于压缩 http 压缩传输--with-openssl \ # 支持 ssl 加密--enable-mysqlnd \ #mysql 数据库--with-mysqli \--with-pdo-mysql \--disable-debug \ # 关闭 debug 功能--enable-sockets \ # 支持套接字访问--enable-soap \ # 支持 soap 扩展协议--enable-xml \ # 支持 xml--enable-ftp \ # 支持 ftp--enable-gd \ # 支持 gd 库--enable-exif \ # 支持图片元数据--enable-mbstring \ # 支持多字节字符串--enable-bcmath \ # 打开图片大小调整 , 用到 zabbix 监控的时候用到了这个模块--with-fpm-systemd # 支持 systemctl 管理 cgi
php相关配置优化
[root@Nginx ~]# vim /usr/local/php/etc/php.ini
[Date]
; Defines the default timezone used by the date functions
; https://php.net/date.timezone
date.timezone = Asia/Shanghai #
修改时区
#
生成启动文件
准备
php
测试页面
Nginx
配置转发
访问验证
php
测试页面
6.3.2 php的动态扩展模块
部署memcached
部署memcached
测试:
6.3.3php高速缓存
测试
7 nginx 二次开发版本
7.1 openresty
Nginx
是俄罗斯人发明的,
Lua
是巴西几个教授发明的,中国人章亦春把
LuaJIT VM
嵌入到
Nginx
中,实现了 OpenResty
这个高性能服务端解决方案
OpenResty®
是一个基于
Nginx
与
Lua
的高性能
Web
平台,其内部集成了大量精良的
Lua
库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web
应用
Web
服务和动态网关。
OpenResty®
通过汇聚各种设计精良的
Nginx
模块(主要由
OpenResty
团队自主开发),从而将
Nginx有效地变成一个强大的通用 Web
应用平台。这样,
Web
开发人员和系统工程师可以使用
Lua
脚本语言
调动
Nginx
支持的各种
C
以及
Lua
模块,快速构造出足以胜任
10K
乃至
1000K
以上单机并发连接的高性能 Web
应用系统。
OpenResty
由于有功能强大且方便的的
API,
可扩展性更强
,
如果需要实现定制功能
,OpenResty
是个不错的 选择
编译安装
openresty
安装依赖