一、Nginx原理介绍

  1.1:什么是Nginx

    Nginx是一个开源的,支持高性能、高并发的WWW服务和代理服务软件

  1.2:Nginx的功能特点及应用场合

    ① 支持高并发:能支持几万并发连接,特别是针对静态小文件业务

    ② 资源消耗少:在3万并发连接的情况下,开始10个nginx的线程消耗不到200M

    ③ 可以做HTTP的反向代理及加速缓存,即负载均衡,内置对RS节点的服务器健康检查

    ④ 具备squid等专业代理软件的缓存功能

    ⑤ 支持异步网络IO事件模型

  1.3:同步与异步的简单介绍

    ① 同步:发送出去一直等待,直到被处理(效率低 安全性高)

    ② 异步:发送出去不管有没有被处理,直接进行下一个请求(效率高 安全性低)

  1.4:epoll模型和select模型的区别

    Nginx所使用的模型就是异步epoll模型,所以他的效率高速度快,Apache使用的模型就是select模型

    PS:(在生产环境中大多数高并发的软件都是使用的epoll的异步模型)

指标 select epoll
性能 随着连接数的增加,性能是急剧下降的,处理成千上万的连接数性能很差 随着连接数的增加,性能基本上不会发生变化,处理成千上万的连接数,性能很好
连接数 连接数有限制,处理的最大连接数不能超过1024,如要超过1024个连接数,需要修改FD_SETSIZE宏,并重新编译 连接数没有限制
内在处理机制 线性轮询 回调callback
开发的复杂性

二、Nginx代理原理介绍

  2.1:正向/反向代理原理图

  2.2:正向代理原理阐述

    正向代理:客户端<-->代理-->服务端

    正向代理就是客户端和服务器之间的中间服务器,为了从服务器取到内容,客户端向代理服务器发送一个请求并指定目标服务器,然后代理服务器向服务器转交请求并将获得的内容回给客户端,客户端必须设置正向代理服务器,当然前提是你要知道正向代理服务器的IP地址和程序端口

    其实举个例子就是

    A(客户端)想租C(服务端)的房子,但是A(客户端)并不认识C(服务端)租不到。
    B(代理)认识C(服务端)能租这个房子所以你找了B(代理)帮忙租到了这个房子。

    这个过程中C(服务端)不认识A(客户端)只认识B(代理)
    C(服务端)并不知道A(客户端)租了房子,只知道房子租给了B(代理)。

    这个样做的目的是

    ① 访问本无法访问的服务器(Over the wall访问谷歌,但是Over the wall的技术不仅仅是使用了传统的正向代理技术还有其他的技术)

    ② 缓存(Cache)作用

    ③ 客户端访问授权(可以限制指定的客户端访问)

    ④ 隐藏访问者的行踪(抓肉鸡)

  2.3:反向代理原理阐述

    反向代理:客户端-->代理<-->服务端

    反向代理正好与正向代理相反,对于客户端而言代理服务器就是提供访问业务的服务器,并且客户端不需要进行任何的特别的设置,客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向何处(提供访问业务的服务器)转发请求,并将获得的内容返回给客户端

    举例说明

    A(客户端)想租一个房子,B(代理)就把这个房子租给了他。
    这时候实际上C(服务端)才是房东。
    B(代理)是中介把这个房子租给了A(客户端)。

    这个过程中A(客户端)并不知道这个房子到底谁才是房东
    他都有可能认为这个房子就是B(代理)的

    使用反向代理的目的

    ① 保护和隐藏原始的资源服务器

    ② 实现服务器集群的负载均衡,实现客户端高速访问

PS:网上有人说NGINX不能做正向代理,其实是不对的。NGINX也可以做正向代理,不过用的人比较少了。

三、Nginx安装

  3.1:编译安装

nginx的版本在不断的更新中,以后我能可以去http://nginx.org/ 去下载最新的稳点版
yum -y install wget (可以使用rpm -qa wget 看看有没有安装,没有安装在执行yum安装)
yum -y install pcre pcre-devel openssl openssl-devel (为了使用nginx的伪静态功能,centos7 默认已经安装了)
mkdir -p /server/software (创建一个通用的存放软件的目录)
cd /server/software
wget -q http://nginx.org/download/nginx-1.12.2.tar.gz
tar xf nginx-1.12.2.tar.gz -C /opt/
cd /opt/nginx-1.12.2
useradd nginxs -s /sbin/nologin -M
./configure --user=nginxs --group=nginxs --with-http_ssl_module --with-http_stub_status_module --prefix=/data/nginx-1.12.2/ # 配置 ================================解释=======================================
--user=nginxs # 指定安装的用户
--group=nginxs # 指定安装的组
--with-http_ssl_module # 开启https
--with-http_stub_status_module # 开启nginx的status监测
--prefix=/data/nginx-1.12.2/ # 指定安装目录
================================解释======================================= make && make install # 编译 安装
ln -s /data/nginx-1.12.2/ /data/nginx # 创建软连接 为了工作中方便
/data/nginx/sbin/nginx # 启动nginx
netstat -lntup | grep nginx # 检查是否启动成功 客户端测试
curl -v 192.168.163.129(服务器地址)

  3.2:yum安装

yum -y install pcre pcre-devel openssl openssl-devel (为了使用nginx的伪静态功能,centos7 默认已经安装了)
yum -y install epel-resease (centos的默认yum源没有nginx的包,所以我们要在第三方yum源安装)
yum -y install nginx
systemctl start nginx # 启动
netstat -lntup | grep nginx # 检查是否启动成功
客户端测试
curl -v 192.168.163.129(服务器地址)

四、Nginx常用模块

  4.1:常用模块及功能介绍

    核心模块官网地址:http://nginx.org/en/docs/ngx_core_module.html

    http模块官网地址:http://nginx.org/en/docs/

    核心模块:nginx的核心模块负责nginx的全局应用,主要是对应主配置文件的Main区块和Events区块区域,这里有很多的Nginx的全局参数配置

    http标准模块:这些标准模块,虽然不是nginx软件所必须的,但是都是很常用的

ngx_http_core_module			# 包括一些核心的http参数配置,对应http区块部分
ngx_http_access_module # 访问控制模块,用来控制网站用户对nginx的访问
ngx_http_gzip_module # 压缩模块,对nginx的返回数据进行压缩
ngx_http_fastcgi_module # fastcgi模块,和动态应用相关的模块,如php
ngx_http_proxy_module # proxy代理模块
ngx_http_upstream_module # 负载均衡模块,可以实现网站的负载均衡及节点检查
ngx_http_rewrite_module # URL地址重写模块
ngx_http_limit_conn_module # 限制用户并发连接数及请求模块
ngx_http_limit_req_module # 根据定义的key限制nginx请求过程的速率
ngx_http_log_module   # 访问日志模块,以指定的格式记录访问日志
ngx_http_auth_basic_module # Web认证模块,设置web用户通过账号密码访问nginx
ngx_http_ssl_module   # ssl模块 用于加密的http连接
ngx_http_stub_status_module # 记录nginx基本的访问状

五、Nginx配置文件说明

  5.1:nginx的配置文件(/etc/nginx.conf)基本解析说明

cat /etc/nginx/nginx.conf.default | egrep -v "#|^$"  # 对配置文件进行最小化

worker_processes  1;	# worker的进程数(和CPU的核心数一致最好)
events { # 事件区块的开始
worker_connections 1024; # 每个worker的最大连接数
} # 事件区块的结束
http { # http区块的开始
include mime.types; # 设定mime类型,类型由mime.type文件定义
default_type application/octet-stream; # 默认类型
sendfile on; # 开启高效的传输模式
keepalive_timeout 65; # 超时时间
server { # server区块的开始
listen 80; # 监听的端口
server_name localhost; # 域名地址
location / { # 站点的根目录
root html; # 存放网站html文件的目录
index index.html index.htm; # 打开网站的默认文件
}
error_page 500 502 503 504 /50x.html; # 错误文件地址,出现错误访问这个下面的html
location = /50x.html {
root html;
}
}
}

六、Nginx两种代理的配置

  6.1:正向代理

应用在nginx的server段,不要server_name,需要添加一个resolver。
cat /etc/nginx/nginx.conf worker_processes 1;
error_log /var/log/nginx/error.log; # 配置错误日志默认级别error
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
# 配置DNS解析IP地址,比如 Google Public DNS,以及超时时间(5秒)
resolver 8.8.8.8; # 必需
resolver_timeout 5s; # 监听端口
listen 8080; access_log /home/reistlin/logs/proxy.access.log;
error_log /home/reistlin/logs/proxy.error.log; location / {
# 配置正向代理参数
proxy_pass $scheme://$host$request_uri;
# 解决如果URL中带"."后Nginx 503错误
proxy_set_header Host $http_host; # 配置缓存大小
proxy_buffers 256 4k;
# 关闭磁盘缓存读写减少I/O
proxy_max_temp_file_size 0;
# 代理连接超时时间
proxy_connect_timeout 30; # 配置代理服务器HTTP状态缓存时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
}
}
client端:
一次代理,直接在shell执行:
#export http_proxy=http://192.168.163.132:8080 永久使用:
#vim .bashrc
export http_proxy=http://192.168.163.132:8080
#source .bashrc

  6.2:反向代理

反向代理的配置
cat /etc/nginx/nginx.conf worker_processes 2; #启动进程,通常设置成和cpu的数量相等
events {
worker_connections 1024; #单个后台worker process进程的最大并发链接数
}
http {
include mime.types; #设定mime类型,类型由mime.type文件定义
default_type application/octet-stream;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
keepalive_timeout 65; #连接超时时间
server {
listen 80; #侦听80端口
server_name localhost; # 定义使用www.xx.com访问
charset utf-8;
location / {
root html;
add_header Cache-Control no-store;
add_header 'Access-Control-Allow-Origin' '*';
index index.html index.htm;
}
location /request/ {
root /request; # 网站的资源路径
#请求替换地址 例如要请求http://localhost:8888/login/ 也就是请求http://localhost/request/
proxy_pass http://localhost:8888/login/;
proxy_redirect off;
proxy_set_header Host $host; #请求主机头字段,否则为服务器名称。
# 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_headers_hash_max_size 1024; #存放http报文头的哈希表容量上限,默认为512个字符
proxy_headers_hash_bucket_size 128; #设置头部哈希表大小 默认为64 }
location ~ ^/html5/ {
rewrite /html5(.*)$ $1 break; #该指令根据表达式来重定向URI, 路径中存在/html5/的
expires -1; #缓存
root D:\html5; #前端静态文件物理路径 通过http://localhost/html5/来访问D盘html5下的文件夹
}
}
}

七、Nginx虚拟主机配置

  6.1:什么是虚拟主机

    在web服务里面就是一个独立的网站站点,这个站点对应独立的域名,具有独立的程序及资源目录,可以独立的对外提供服务

  6.2:虚拟主机的类型

    ① 基于域名的虚拟主机

      相同的IP端口不同的域名提供不同的资源,最常用的

    ② 基于端口的虚拟主机

      相同的IP不同的端口提供不同的资源(局域网最常用的)

    ③ 基于IP的虚拟主机

      相同端口不同的IP提供不同的资源(最不常用,一般也不会用到)

  6.3:虚拟主机的配置(在nginx.conf配置文件中添加server区块)

    ① 基于域名的虚拟主机

vim /etc/nginx/nginx.conf

worker_processes  1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.zhujingzhi.org; # 域名不一样
location / {
root html/www; # 记得添加网站的资源目录
index index.html index.htm;
}
}
server {
listen 80;
server_name bbs.zhujingzhi.org; # 域名不一样
location / {
root html/bbs; # 记得添加网站的资源目录
index index.html index.htm;
}
}
server {
listen 80;
server_name blos.zhujingzhi.org; # 域名不一样
location / {
root html/blos; # 记得添加网站的资源目录
index index.html index.htm;
}
}
}  

    ② 基于端口的虚拟主机

vim /etc/nginx/nginx.conf

worker_processes  1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80; # 端口也不一样
server_name www.zhujingzhi.org; # 域名不一样
location / {
root html/www; # 记得添加网站的资源目录
index index.html index.htm;
}
}
server {
listen 81; # 端口也不一样
server_name bbs.zhujingzhi.org; # 域名不一样
location / {
root html/bbs; # 记得添加网站的资源目录
index index.html index.htm;
}
}
server {
listen 82; # 端口也不一样
server_name blos.zhujingzhi.org; # 域名不一样
location / {
root html/blos; # 记得添加网站的资源目录
index index.html index.htm;
}
}
}

    ③ 基于IP的虚拟主机

vim /etc/nginx/nginx.conf

worker_processes  1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 192.168.163.129:80; # 端口一样IP不一样
server_name www.zhujingzhi.org; # 域名不一样
location / {
root html/www; # 记得添加网站的资源目录
index index.html index.htm;
}
}
server {
listen 192.168.163.130:80; # 端口一样IP不一样
server_name bbs.zhujingzhi.org; # 域名不一样
location / {
root html/bbs; # 记得添加网站的资源目录
index index.html index.htm;
}
}
server {
listen 192.168.163.131:80; # 端口一样IP不一样
server_name blos.zhujingzhi.org; # 域名不一样
location / {
root html/blos; # 记得添加网站的资源目录
index index.html index.htm;
}
}
}

PS:修改完配置文件(因为nginx支持reload方法)所以我们要重新的平滑重启下 在重启之前一定nginx -t 检查下语法,在配置基于IP的虚拟主机的时候IP一定是存在的,不然会出现语法错误

八、Nginx状态模块使用

  7.1:nginx status 状态模块配置(--with-http_stub_status_module参数)

# 在编译安装的时候指定--with-http_stub_status_module参数就是开启了状态监测模块

# 主配置文件
cat /etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf; # 我们把server区块分离出来了放到了/etc/nginx/conf.d/下,然后用include导入
} # 状态监测配置文件(这个就是要配置的状态监测的server区块写到.conf里面在主配置文件中导入)
cat >> /etc/nginx/conf.d/status.conf <<EOF
> # status
> server {
> listen 80;
> server_name status.zhujingzhi.org;
> location / {
> stub_status on; # 开启状态监测
> access_log off; # 拒绝写日志
> allow 192.168.163.0/24; # 允许访问的地址
> deny all; # 决绝访问
> }
> }
> EOF

  7.2:输出结果详细解析

没有域名解析,我们要添加hosts文件(只针对测试环境)
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.163.132 status.zhujingzhi.org # 我们添加的 curl status.zhujingzhi.org # 访问状态监测的地址 # 得到的结果
Active connections: 1
server accepts handled requests
27 27 27
Reading: 0 Writing: 1 Waiting: 0 # 结果的解释
Active connections: 表示Nginx正处理的活动连接数
server:表示Nginx启动到现在共处理了多少个连接
accepts:表示Nginx启动到现在共处理成功创建的握手次数
handled requests:表示共处理了多少次请求
Reading:表示读取到客户端的Header信息数
Writing:表示返回给客户端的Header信息数
Waiting:表示已经处理完正在等候下一次请求指令的驻留连接数,在开启keeplive的情况下,这个值等于active-(reading+writing)

PS:为了安全起见,这个状态信息要防止外部用户查看

  7.3:利用监控系统监控nginx的状态(扩展)

九、Nginx日志详情

  8.3:访问日志内容解析(access.log)

访问日志
参数
log_format:用来定义日志的格式
access_log:用来注定日志文件的路径及使用的何种日志格式记录日志 # 默认的日志格式(放在http标签内)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; # 日志格式参数说明
$remote_addr # 记录客户端访问网站的地址
$remote_user # 远程客户端用户的名称
$time_local # 记录访问时间与时区
$request # 用户的http请求起始行信息
$status # http状态码,记录请求返回的状态
$body_bytes_sent # 服务器发送给客户端的响应body字节数
$http_referer # 记录此次请求是从哪个链接访问过来的可以根据refer进行防盗链的设置
$http_user_agent # 记录客户端的访问信息,例如:浏览器,手机客户端等
$http_x_forwarded_for # 当前端有代理服务器时,设置Web节点记录客户端地址的配置,此参数生效的前提是代理服务器上也要进行配置x_forwarded_for设置 访问日志配置文件设置
在server区块中添加access_log /etc/log/access.log main; 这里的main表示的是在http标签中设置的日志格式的main 这个可以是main1、main2 等不同的格式记录日志

  8.4:错误日志内容解析(error.log)

错误日志
属于核心功能模块ngx_core_module参数,该参数的名字为error_log,可以放在main区块中全局配置,也可以放在不同的虚拟主机中单独记录虚拟主机的错误信息 语法
error_log file level;
error_log # 固定的参数
file # 日志的文件
level # 日志的级别 日志的级别包含:debug|info|notice|warn|error|crit|alert|emerg ,级别越高记录的信息越少,生产中一般使用warn|error|crit 这个三个级别
PS:千万不要使用info 会产生大量的I/O

  8.1:配置文件配置日志

  访问日志配置

cat /etc/nginx/nginx.conf

worker_processes  1;
error_log /var/log/nginx/error.log; # 配置错误日志默认级别error
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; # 默认格式,可以自定义
access_log /var/log/nginx/access.log main; # 启动访问日志
server {
listen 80;
server_name www.zhujingzhi.org;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

  错误日志配置

cat /etc/nginx/nginx.conf

worker_processes  1;
error_log /var/log/nginx/error.log; # 配置错误日志默认级别error
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.zhujingzhi.org;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

十、Nginx日志切割

  9.1:日志切割的方式

  9.2:日志切割脚本+crontab计划任务

  9.3:常用的日志收集工具(rsyslog、awstats、flume、ELK、storm)

十一、Nginx认证访问

  10.1:为什么要配置认证访问

    有些时候我们用nginx要做内部的网站访问,或者是用nginx来做文件服务器给内部人员使用,为了安全我们就要用到认证机制,保证数据的安全

  10.2:配置日志访问的方法

cat  /etc/nginx/nginx.conf

worker_processes  1;
error_log /var/log/nginx/error.log; # 配置错误日志默认级别error
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80; #监听端口为80
server_name www.zhujingzhi.com; #虚拟主机网址
location / {
root html/bbs; # 虚拟主机网站根目录
index index.html index.htm; # 虚拟主机首页
auth_basic "secret"; # 虚拟主机认证命名
auth_basic_user_file /usr/local/nginx/passwd.db; # 虚拟主机用户名密码认证数据库
}
location /status {
stub_status on; # 开启网站监控状态
access_log /usr/local/nginx/logs/www1_status.log; # 监控日志
auth_basic "NginxStatus";
}
}
} 我们还要生成用户名密码文件
通过htpasswd命令生成用户名及对应密码数据库文件
htpasswd -c /usr/local/nginx/passwd.db nginxtest

十二、Nginx Location

  location指令的作用是可以根据用户请求的URI来执行不同的应用,其实就是根据用户的请求的网站的地址URL匹配,匹配成功即进行相关的操作(相当于if...else语句,女孩子你有钱我就嫁给你 O(∩_∩)O哈哈~)

  ① location语法

location[=|~|~*|^~]uri{
.....
} location # 指令
[=|~|~*|^~|!~|!~|@] # 匹配标识
uri # 匹配的网站地址
{...} # 匹配URI后要执行的配置段 ==================================================================================== 匹配标识解释
= # 精确匹配
~ # 开头表示区分大小写的正则匹配
~* # 开头表示不区分大小写的正则匹配
^~ # 常规的字符串匹配检查之后,不做正则表达式的检查
!~和!~* # 分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ # 通用匹配,任何请求都会匹配到。
@ # "@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files location = / {
# 只匹配"/".
[ configuration A ]
}
location / {
# 匹配任何请求,因为所有请求都是以"/"开始
# 但是更长字符匹配或者正则表达式匹配会优先匹配
[ configuration B ]
}
location /documents/ {
# 匹配以documents开头的地址
[ configuration C ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
[ configuration D ]
}
location ~* .(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg结尾的请求.
# 但是所有 /images/ 目录的请求将由 [Configuration C]处理.
[ configuration E ]
}

  ② 配置location

主配置文件
cat /etc/nginx/nginx.conf worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf; # 导入虚拟主机文件
} # 虚拟主机文件配置location
cat /etc/nginx/conf.d/www.conf # www
server {
listen 80;
server_name www.zhujingzhi.org;
location / {
return 401;
#root html/www;
#index index.html index.htm;
}
location = /{
return 402;
}
location /documents/ {
return 403;
}
location ^~ /images/ {
return 404;
}
location ~* .(gif|jpg|jpeg)$ {
return 405;
}
} 客户端测试
为了测试我们要加hosts文件
cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.163.132 status.zhujingzhi.org www.zhujingzhi.org 使用curl 测试 返回我们配置在location中的return返回值
curl -s -o /dev/null -I -w "%{http_code}\n" http://www.zhujingzhi.org
402
curl -s -o /dev/null -I -w "%{http_code}\n" http://www.zhujingzhi.org/
402
curl -s -o /dev/null -I -w "%{http_code}\n" http://www.zhujingzhi.org/index.html
401
curl -s -o /dev/null -I -w "%{http_code}\n" http://www.zhujingzhi.org/documents/document.html
403
curl -s -o /dev/null -I -w "%{http_code}\n" http://www.zhujingzhi.org/images/1.png
404
curl -s -o /dev/null -I -w "%{http_code}\n" http://www.zhujingzhi.org/documents/2.jpg
405

  ③ 结论

用户请求的URI				完整的URL						   匹配的返回值
/ http://www.zhujingzhi.org/ 402
/index.html             http://www.zhujingzhi.org/index.html           401
/documents/document.html      http://www.zhujingzhi.org/documents/document.html         403
/images/1.png             http://www.zhujingzhi.org/images/1.png                404
/documents/2.jpg             http://www.zhujingzhi.org/documents/2.jpg              405 location 优先级
1、Directives with the = prefix that match the query exactly. If found, searching stops.
2、All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
3、Regular expressions, in order of definition in the configuration file.
4、If #3 yielded a match, that result is used. Else the match from #2 is used. 1、=前缀的指令严格匹配这个查询。如果找到,停止搜索。
2、所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
3、正则表达式,在配置文件中定义的顺序。
4、如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果。

十三、Nginx rewrite

Nginx Web服务(一)的更多相关文章

  1. 2-4、nginx特性及基础概念-nginx web服务配置详解

    Nginx Nginx:engine X 调用了libevent:高性能的网络库 epoll():基于事件驱动event的网络库文件 Nginx的特性: 模块化设计.较好扩展性(不支持模块动态装卸载, ...

  2. Linux实战教学笔记38:企业级Nginx Web服务优化实战(下)

    四,Nginx站点目录及文件URL访问控制 4.1 根据扩展名限制程序和文件访问 Web2.0时代,绝大多数网站都是以用户为中心多的,例如:bbs,blog,sns产品,这几个产品都有一个共同特点,就 ...

  3. Linux实战教学笔记37:企业级Nginx Web服务优化实战(上)

    一,Nginx基本安全优化 1.1 调整参数隐藏Nginx软件版本号信息 一般来说,软件的漏洞都和版本有关,这个很像汽车的缺陷,同一批次的要有问题就都有问题,别的批次可能就都是好的.因此,我们应尽量隐 ...

  4. Nginx web服务优化 (一)

    1.Nginx基本安全优化 a.更改配置文件参数隐藏版本 编辑nginx.conf配置文件增加参数,实现隐藏Nginx版本号的方式如下.在nginx配置文件nginx.conf中的http标签段内加入 ...

  5. nginx web服务优化

    nginx基本安全优化 1. 调整参数隐藏nginx软件版本号信息 软件的漏洞和版本有关,我们应尽量隐藏或消除web服务对访问用户显示各类敏感信息(例如web软件名称及版本号等信息),这样恶意的用户就 ...

  6. 企业级Nginx Web服务优化实战

    web优化一览总结表 优化类型 优化说明 优化方法 安全优化 隐藏nginx版本信息优化 修改nginx配置文件实现优化 server_tokens off: 修改nginx版本信息优化 修改ngin ...

  7. Nginx Web服务应用

    Nginx 指令目录 Nginx 介绍 Nginx 编译安装 Nginx 功能模块 Nginx 目录结构 Nginx 配置文件 Nginx 虚拟主机配置 Nginx 状态信息功能配置 Nginx 错误 ...

  8. centos7 搭建 nginx web服务 反代理

    Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. ...

  9. 【docker专栏4】使用docker安装nginx提供web服务

    一般学习一项技术,会先用一个最简单的例子或最典型的例子来向大家讲解入门内容,所以此文为大家介绍使用docker安装nginx容器服务.从基础使用的角度来讲,此文几乎涵盖了docker最核心的内容:镜像 ...

随机推荐

  1. 何时开始phonics学习及配套阅读训练zz

    引子:自从11月份俱乐部第一批孩子开始英文阅读,到现在三.四个月的时间过去了.很多孩子从不知道怎么读绘本甚至排斥英语,到现在能很投入地看原版书, 有些甚至主动地去寻找拼读规律.我家小宝目前也从前期的阅 ...

  2. 2018.09.20 atcoder Painting Graphs with AtCoDeer(tarjan+polya)

    传送门 一道思维题. 如果没有环那么对答案有k的贡献. 如果恰为一个环,可以用polya求贡献. 如果是一个有多个环重叠的双联通的话,直接转化为组合数问题(可以证明只要每种颜色被选取的次数相同一定可以 ...

  3. APMServ—优秀的PHP集成环境工具

    经常折腾wordpress和各种php开发的cms,免不了要在本地测试这些程序,所以选择一款好的php集成环境就至关重要啦.之前在月光博客上看到有一篇“常见的WAMP集成环境”介绍,然后先后试用过XA ...

  4. python面向对象-2深入类的属性

    在交互式环境中输入: >>> class A: a=0 def __init__(self): self.a=10 self.b=100 >>> a=A() > ...

  5. IntelliJ IDEA 2017版 spring-boot使用Spring Data JPA使用Repository<T, T>编程

    1.环境搭建pom.xml搭建 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=& ...

  6. cmake-add_definitions

    add_definitions: Adds -D define flags to the compilation of source files. add_definitions(-DFOO -DBA ...

  7. struts2 的特征

    web.xml <filter> <filter-name>struts2</filter-name> <filter-class>org.apache ...

  8. (并查集 添加关系)How Many Answers Are Wrong --Hdu --3038

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=3038 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  9. noip第10课作业

    1.     统计不同类型字符出现次数 [问题描述] 输入一个字符串(假设长度不超过1000个字符),统计其中大写,小写,数字,其他字符出现的次数. [样例输入]Hello,what are you ...

  10. 快速学会在JSP中使用EL表达式

    在没有学会EL表达式之前,我们想在JSP文件中获取servlet或者其他JSP页面传来的值,通常都是在JSP页面中编写java代码来实现.而在jsp页面编写Java 代码,这种做法时不规范的,将会产生 ...