什么是 Nginx
Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协定下发行。其特点是占有内存少,并发能力强,事实上 nginx 的并发能力在同类型的网页服务器中体现较好,中国大陆应用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
Nginx 的次要作用又是什么
1. 负载平衡
负载平衡是高可用网络基础架构的要害组件,通常用于将工作负载散布到多个服务器来进步网站、利用、数据库或其余服务的性能和可靠性
上图来解释一下吧
比方我本人创立了一个网站,分享一些学习心得之类的货色,一开始的时候拜访数量少,那么一台服务器就能够撑持,然而起初有一天我忽然成为大明星,那么这时候有很多人想要拜访我的网站,慢慢的一台服务器不足以解决大量的申请,这时候就须要减少服务器来减缓压力,如果我减少了两台服务器,我不能让拜访的人须要记住 3 个域名吧,就比方百度,他也有很多台服务器,然而咱们只须要记住百度就能够了,那么这是怎末做到的呢?
这个时候呢我就能够在搭建一台新的 Nginx 服务器,让所有的申请都先来拜访 Nginx 服务器,而后在由 Nginx 派发解决申请到其余服务器上 Nginx 是不解决申请的,他只是依据不同的策略来派发到不同的服务器上
,这样是不是就解决了问题,用户只须要记住一个域名,而且申请量增大的时候也不会导致服务器宕机
1.1 负载平衡策略
从下面咱们晓得了 Nginx 是能够依据不同的策略来派发解决申请的,那么都有什么策略呢?
-
轮询(默认)
每个申请按工夫程序逐个调配到不同的后端服务器,如果后端服务器宕机,能主动剔除
-
指定权重
指定轮询几率,weight 和拜访比率成正比,用于后端服务器性能不均的状况
-
ip_hash
指定负载均衡器依照基于客户端 IP 的调配形式,这个办法确保了雷同的客户端的申请始终发送到雷同的服务器,以保障 session 会话。这样每个访客都固定拜访一个后端服务器,能够解决 session 不能跨服务器的问题
-
least_conn(最小连接数)
把申请转发给连接数较少的后端服务器。轮询算法是把申请均匀的转发给各个后端,使它们的负载大致相同;然而,有些申请占用的工夫很长,会导致其所在的后端负载较高。这种状况下,least_conn 这种形式就能够达到更好的负载平衡成果
-
第三方策略 第三方的负载平衡策略的实现须要装置第三方插件
-
fair
依照服务器端的响应工夫来调配申请,响应工夫短的优先调配
-
url_hash
拜访 url 的 hash 后果来调配申请,使每个 url 定向到同一个后端服务器,要配合缓存命中来应用。同一个资源屡次申请,可能会达到不同的服务器上,导致不必要的屡次下载,缓存命中率不高,以及一些资源工夫的节约。而应用 url_hash,能够使得同一个 url(也就是同一个资源申请)会达到同一台服务器,一旦缓存住了资源,再此收到申请,就能够从缓存中读取
-
1.2 负载平衡策略的配置文件
- 轮询
这个的作用就是服务器的一个汇合,所有会被 Nginx 派发工作的服务器在这里配置
upstream 是固定值 nodes 这个是随便的名字然而要跟上面的 server.ocation.proxy_pass 中 http 后的名字统一
upstream nodes {
server 192.168.1.11;
server 192.168.1.12;
}
server {
listen 80; // 监听的端口号
server_name 127.0.0.1; //Nginx 服务器地址
location / { // / 示意所有的申请
proxy_pass http://nodes; // 被转发的服务器地址
}
- 权重
upstream nodes {
server 192.168.1.11 weight=3;//weight 默认值是 1 数值越大,代表被被拜访的次数也会越多
server 192.168.1.12 weight=10;}
server {
listen 80; // 监听的端口号
server_name 127.0.0.1; //Nginx 服务器地址
location / { // / 示意所有的申请
proxy_pass http://nodes; // 被转发的服务器地址
}
- least_conn(最小连接数)
upstream nodes {
least_conn; // 请连接数较少的后端服务器
server 192.168.1.11;//weight 默认值是 1 数值越大,代表被被拜访的次数也会越多
server 192.168.1.12;}
server {
listen 80; // 监听的端口号
server_name 127.0.0.1; //Nginx 服务器地址
location / { // / 示意所有的申请
proxy_pass http://nodes; // 被转发的服务器地址
}
- ip_hash
upstream nodes {
ip_hash; // 申请按拜访 ip 的 hash 后果调配
server 192.168.1.11;//weight 默认值是 1 数值越大,代表被被拜访的次数也会越多
server 192.168.1.12;}
server {
listen 80; // 监听的端口号
server_name 127.0.0.1; //Nginx 服务器地址
location / { // / 示意所有的申请
proxy_pass http://nodes; // 被转发的服务器地址
}
- fair
upstream nodes {
server 192.168.1.11;//weight 默认值是 1 数值越大,代表被被拜访的次数也会越多
server 192.168.1.12;fair;// 后端服务器的响应工夫来调配申请,响应工夫短的优先调配
}
server {
listen 80; // 监听的端口号
server_name 127.0.0.1; //Nginx 服务器地址
location / { // / 示意所有的申请
proxy_pass http://nodes; // 被转发的服务器地址
}
- url_hash
upstream nodes {
server 192.168.1.11;//weight 默认值是 1 数值越大,代表被被拜访的次数也会越多
server 192.168.1.12;hash $request_uri;
hash_method crc32;// 按拜访 url 的 hash 后果来调配申请,使每个 url 定向到同一个后端服务器
}
server {
listen 80; // 监听的端口号
server_name 127.0.0.1; //Nginx 服务器地址
location / { // / 示意所有的申请
proxy_pass http://nodes; // 被转发的服务器地址
}
以上文件都是在 nginx.conf 外面配置
反向代理
代理: 在 Java 设计模式中,代理模式是这样定义的:给某个对象提供一个代理对象,并由代理对象管制原对象的援用
在说反向代理前先说一下什么是正向代理?
1.1 正向代理
举个例子阐明一下吧,有一天我要去理发,而后我到了理发店之后说,我要找王 Tony 给我理发
其实这就是正向代理,明确的晓得本人的指标是什么
1.2 反向代理
还是举个例子,我还是去理发店理发,不过我是第一次来,我说给我理个最便宜的,这时候我并不知道谁要来给我理发,然而只有能给理发就能够了
这就是反向代理,我不关怀解决申请的是谁,你只有把我要的后果给我就好了
反向代理和正向代理的区别就是,正向代理客户端,反向代理服务器
反向代理的配置
server {
listen 80;
server_name localhost; //Nginx 地址
location / {
proxy_pass http://123.123.123.123.com // 要代理的服务器地址
index index.html index.htm index.jsp;
}
}
配置完这个当前,重启 Nginx 在浏览器中输出 localhost:80(80 能够不必输出), 就能够间接拜访到服务器了
这就是反向代理
Nginx 配置文件的根本配置
user nginx nginx ;
Nginx 用户及组:用户 组。window 下不指定
worker_processes 8;
工作过程:数目。依据硬件调整,通常等于 CPU 数量或者 2 倍于 CPU。error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
谬误日志:寄存门路。pid logs/nginx.pid;
pid(过程标识符):寄存门路。worker_rlimit_nofile 204800;
指定过程能够关上的最大描述符:数目。这个指令是指当一个 nginx 过程关上的最多文件描述符数目,理论值应该是最多关上文件数(ulimit -n)与 nginx 过程数相除,然而 nginx 调配申请并不是那么平均,所以最好与 ulimit -n 的值保持一致。当初在 linux 2.6 内核下开启文件关上数为 65535,worker_rlimit_nofile 就相应应该填写 65535。这是因为 nginx 调度时调配申请到过程并不是那么的平衡,所以如果填写 10240,总并发量达到 3 - 4 万时就有过程可能超过 10240 了,这时会返回 502 谬误。events
{
use epoll;
应用 epoll 的 I /O 模型。linux 倡议 epoll,FreeBSD 倡议采纳 kqueue,window 下不指定。补充阐明:
与 apache 相类,nginx 针对不同的操作系统,有不同的事件模型
A)规范事件模型
Select、poll 属于规范事件模型,如果以后零碎不存在更无效的办法,nginx 会抉择 select 或 poll
B)高效事件模型
Kqueue:应用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 应用双处理器的 MacOS X 零碎应用 kqueue 可能会造成内核解体。Epoll:应用于 Linux 内核 2.6 版本及当前的零碎。/dev/poll:应用于 Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。Eventport:应用于 Solaris 10。为了防止出现内核解体的问题,有必要装置安全补丁。worker_connections 204800;
没个工作过程的最大连贯数量。依据硬件调整,和后面工作过程配合起来用,尽量大,然而别把 cpu 跑到 100% 就行。每个过程容许的最多连接数,实践上每台 nginx 服务器的最大连接数为。worker_processes*worker_connections
keepalive_timeout 60;
keepalive 超时工夫。client_header_buffer_size 4k;
客户端申请头部的缓冲区大小。这个能够依据你的零碎分页大小来设置,个别一个申请头的大小不会超过 1k,不过因为个别零碎分页都要大于 1k,所以这里设置为分页大小。分页大小能够用命令 getconf PAGESIZE 获得。[root@web001 ~]# getconf PAGESIZE
4096
但也有 client_header_buffer_size 超过 4k 的状况,然而 client_header_buffer_size 该值必须设置为“零碎分页大小”的整倍数。open_file_cache max=65535 inactive=60s;
这个将为关上文件指定缓存,默认是没有启用的,max 指定缓存数量,倡议和关上文件数统一,inactive 是指通过多长时间文件没被申请后删除缓存。open_file_cache_valid 80s;
这个是指多长时间查看一次缓存的无效信息。open_file_cache_min_uses 1;
open_file_cache 指令中的 inactive 参数工夫内文件的起码应用次数,如果超过这个数字,文件描述符始终是在缓存中关上的,如上例,如果有一个文件在 inactive 工夫内一次没被应用,它将被移除。}
## 设定 http 服务器,利用它的反向代理性能提供负载平衡反对
http
{
include mime.types;
设定 mime 类型, 类型由 mime.type 文件定义
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local]"$request"''$status $body_bytes_sent "$http_referer" ''"$http_user_agent""$http_x_forwarded_for"';
log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';
日志格局设置。$remote_addr 与 $http_x_forwarded_for 用以记录客户端的 ip 地址;$remote_user:用来记录客户端用户名称;$time_local:用来记录拜访工夫与时区;$request:用来记录申请的 url 与 http 协定;$status:用来记录申请状态;胜利是 200,$body_bytes_sent:记录发送给客户端文件主体内容大小;$http_referer:用来记录从那个页面链接拜访过去的;$http_user_agent:记录客户浏览器的相干信息;通常 web 服务器放在反向代理的前面,这样就不能获取到客户的 IP 地址了,通过 $remote_add 拿到的 IP 地址是反向代理服务器的 iP 地址。反向代理服务器在转发申请的 http 头信息中,能够减少 x_forwarded_for 信息,用以记录原有客户端的 IP 地址和原来客户端的申请的服务器地址。access_log logs/host.access.log main;
access_log logs/host.access.404.log log404;
用了 log_format 指令设置了日志格局之后,须要用 access_log 指令指定日志文件的寄存门路;server_names_hash_bucket_size 128;
#保留服务器名字的 hash 表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size 所管制的。参数 hash bucket size 总是等于 hash 表的大小,并且是一路处理器缓存大小的倍数。在缩小了在内存中的存取次数后,使在处理器中减速查找 hash 表键值成为可能。如果 hash bucket size 等于一路处理器缓存的大小,那么在查找键的时候,最坏的状况下在内存中查找的次数为 2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。因而,如果 Nginx 给出须要增大 hash max size 或 hash bucket size 的提醒,那么首要的是增大前一个参数的大小.
client_header_buffer_size 4k;
客户端申请头部的缓冲区大小。这个能够依据你的零碎分页大小来设置,个别一个申请的头部大小不会超过 1k,不过因为个别零碎分页都要大于 1k,所以这里设置为分页大小。分页大小能够用命令 getconf PAGESIZE 获得。large_client_header_buffers 8 128k;
客户申请头缓冲大小。nginx 默认会用 client_header_buffer_size 这个 buffer 来读取 header 值,如果
header 过大,它会应用 large_client_header_buffers 来读取。open_file_cache max=102400 inactive=20s;
这个指令指定缓存是否启用。例: open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
open_file_cache_errors
语法:open_file_cache_errors on | off 默认值:open_file_cache_errors off 应用字段:http, server, location 这个指令指定是否在搜寻一个文件是记录 cache 谬误.
open_file_cache_min_uses
语法:open_file_cache_min_uses number 默认值:open_file_cache_min_uses 1 应用字段:http, server, location 这个指令指定了在 open_file_cache 指令有效的参数中肯定的工夫范畴内能够应用的最小文件数, 如果应用更大的值, 文件描述符在 cache 中总是关上状态.
open_file_cache_valid
语法:open_file_cache_valid time 默认值:open_file_cache_valid 60 应用字段:http, server, location 这个指令指定了何时须要查看 open_file_cache 中缓存我的项目的无效信息.
client_max_body_size 300m;
设定通过 nginx 上传文件的大小
sendfile on;
sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 形式)来输入文件,对于一般利用,必须设为 on。如果用来进行下载等利用磁盘 IO 重负载利用,可设置为 off,以均衡磁盘与网络 IO 处理速度,升高零碎 uptime。tcp_nopush on;
此选项容许或禁止应用 socke 的 TCP_CORK 的选项,此选项仅在应用 sendfile 的时候应用
proxy_connect_timeout 90;
后端服务器连贯的超时工夫_发动握手等待响应超时工夫
proxy_read_timeout 180;
连贯胜利后_等待后端服务器响应工夫_其实曾经进入后端的排队之中等待解决(也能够说是后端服务器解决申请的工夫)proxy_send_timeout 180;
后端服务器数据回传工夫_就是在规定工夫之内后端服务器必须传完所有的数据
proxy_buffer_size 256k;
设置从被代理服务器读取的第一局部应答的缓冲区大小,通常状况下这部分应答中蕴含一个小的应答头,默认状况下这个值的大小为指令 proxy_buffers 中指定的一个缓冲区的大小,不过能够将其设置为更小
proxy_buffers 4 256k;
设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认状况也为分页大小,依据操作系统的不同可能是 4k 或者 8k
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
设置在写入 proxy_temp_path 时数据的大小,预防一个工作过程在传递文件时阻塞太长
proxy_temp_path /data0/proxy_temp_dir;
proxy_temp_path 和 proxy_cache_path 指定的门路必须在同一分区
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
#设置内存缓存空间大小为 200MB,1 天没有被拜访的内容主动革除,硬盘缓存空间大小为 30GB。keepalive_timeout 120;
keepalive 超时工夫。tcp_nodelay on;
client_body_buffer_size 512k;
如果把它设置为比拟大的数值,例如 256k,那么,无论应用 firefox 还是 IE 浏览器,来提交任意小于 256k 的图片,都很失常。如果正文该指令,应用默认的 client_body_buffer_size 设置,也就是操作系统页面大小的两倍,8k 或者 16k,问题就呈现了。无论应用 firefox4.0 还是 IE8.0,提交一个比拟大,200k 左右的图片,都返回 500 Internal Server Error 谬误
proxy_intercept_errors on;
示意使 nginx 阻止 HTTP 应答代码为 400 或者更高的应答。upstream bakend {
server 127.0.0.1:8027;
server 127.0.0.1:8028;
server 127.0.0.1:8029;
hash $request_uri;
}
nginx 的 upstream 目前反对 4 种形式的调配
1、轮询(默认)每个申请按工夫程序逐个调配到不同的后端服务器,如果后端服务器 down 掉,能主动剔除。2、weight
指定轮询几率,weight 和拜访比率成正比,用于后端服务器性能不均的状况。例如:upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
2、ip_hash
每个申请按拜访 ip 的 hash 后果调配,这样每个访客固定拜访一个后端服务器,能够解决 session 的问题。例如:upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
3、fair(第三方)按后端服务器的响应工夫来调配申请,响应工夫短的优先调配。upstream backend {
server server1;
server server2;
fair;
}
4、url_hash(第三方)按拜访 url 的 hash 后果来调配申请,使每个 url 定向到同一个后端服务器,后端服务器为缓存时比拟无效。例:在 upstream 中退出 hash 语句,server 语句中不能写入 weight 等其余的参数,hash_method 是应用的 hash 算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
tips:
upstream bakend{# 定义负载平衡设施的 Ip 及设施状态}{
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在须要应用负载平衡的 server 中减少
proxy_pass http://bakend/;
每个设施的状态设置为:
1.down 示意单前的 server 临时不参加负载
2.weight 为 weight 越大,负载的权重就越大。3.max_fails:容许申请失败的次数默认为 1. 当超过最大次数时,返回 proxy_next_upstream 模块定义的谬误
4.fail_timeout:max_fails 次失败后,暂停的工夫。5.backup:其它所有的非 backup 机器 down 或者忙的时候,申请 backup 机器。所以这台机器压力会最轻。nginx 反对同时设置多组的负载平衡,用来给不必的 server 来应用。client_body_in_file_only 设置为 On 能够讲 client post 过去的数据记录到文件中用来做 debug
client_body_temp_path 设置记录文件的目录 能够设置最多 3 层目录
location 对 URL 进行匹配. 能够进行重定向或者进行新的代理 负载平衡
## 配置虚拟机
server
{
listen 80;
配置监听端口
server_name image.***.com;
配置拜访域名
location ~* \.(mp3|exe)$ {
对以“mp3 或 exe”结尾的地址进行负载平衡
proxy_pass http://img_relay$request_uri;
设置被代理服务器的端口或套接字,以及 URL
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
以上三行,目标是将代理服务器收到的用户的信息传到实在服务器上
}
location /face {if ($http_user_agent ~* "xnp") {rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
error_page 404 502 = @fetch;
}
location @fetch {
access_log /data/logs/face.log log404;
rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
location /image {if ($http_user_agent ~* "xnp") {rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
error_page 404 502 = @fetch;
}
location @fetch {
access_log /data/logs/image.log log404;
rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;
}
}
## 其余举例
server
{
listen 80;
server_name *.***.com *.***.cn;
location ~* \.(mp3|exe)$ {
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {if ($http_user_agent ~* "xnp") {rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#error_page 404 http://i1.***img.com/help/noimg.gif;
error_page 404 502 = @fetch;
}
location @fetch {
access_log /data/logs/baijiaqi.log log404;
rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect;
}
}
server
{
listen 80;
server_name *.***img.com;
location ~* \.(mp3|exe)$ {
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {if ($http_user_agent ~* "xnp") {rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif;
}
proxy_pass http://img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#error_page 404 http://i1.***img.com/help/noimg.gif;
error_page 404 = @fetch;
}
#access_log off;
location @fetch {
access_log /data/logs/baijiaqi.log log404;
rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect;
}
}
server
{
listen 8080;
server_name ngx-ha.***img.com;
location / {
stub_status on;
access_log off;
}
}
server {
listen 80;
server_name imgsrc1.***.net;
root html;
}
server {
listen 80;
server_name ***.com w.***.com;
# access_log /usr/local/nginx/logs/access_log main;
location / {rewrite ^(.*)$ http://www.***.com/ ;
}
}
server {
listen 80;
server_name *******.com w.*******.com;
# access_log /usr/local/nginx/logs/access_log main;
location / {rewrite ^(.*)$ http://www.*******.com/;
}
}
server {
listen 80;
server_name ******.com;
# access_log /usr/local/nginx/logs/access_log main;
location / {rewrite ^(.*)$ http://www.******.com/;
}
}
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#设定查看 Nginx 状态的地址
location ~ /\.ht {deny all;}
#禁止拜访.htxxx 文件
}
正文:变量
Ngx_http_core_module 模块反对内置变量,他们的名字和 apache 的内置变量是统一的。首先是阐明客户申请 title 中的行,例如 $http_user_agent,$http_cookie 等等。此外还有其它的一些变量
$args 此变量与申请行中的参数相等
$content_length 等于申请行的“Content_Length”的值。$content_type 等同与申请头部的”Content_Type”的值
$document_root 等同于以后申请的 root 指令指定的值
$document_uri 与 $uri 一样
$host 与申请头部中“Host”行指定的值或是 request 达到的 server 的名字(没有 Host 行)一样
$limit_rate 容许限度的连贯速率
$request_method 等同于 request 的 method,通常是“GET”或“POST”$remote_addr 客户端 ip
$remote_port 客户端 port
$remote_user 等同于用户名,由 ngx_http_auth_basic_module 认证
$request_filename 以后申请的文件的路径名,由 root 或 alias 和 URI request 组合而成
$request_body_file
$request_uri 含有参数的残缺的初始 URI
$query_string 与 $args 一样
$sheeme http 模式(http,https)尽在要求是评估例如
Rewrite ^(.+)$ $sheme://example.com$; Redirect;
$server_protocol 等同于 request 的协定,应用“HTTP/ 或“HTTP/
$server_addr request 达到的 server 的 ip,个别取得此变量的值的目标是进行零碎调用。为了防止零碎调用,有必要在 listen 指令中指明 ip,并应用 bind 参数。$server_name 申请达到的服务器名
$server_port 申请达到的服务器的端口号
$uri 等同于以后 request 中的 URI,可不同于初始值,例如外部重定向时或应用 index
明天就说到这里吧
大家如果有趣味能够关注我的公众号