一、http请求
先补充一点 http 知识
-
yum install -y curl
curl 可以理解成是一个浏览器,只是不能看到页面,看到的是http请求的信息。 -
curl http://www.baidu.com
使用curl请求baidu地址,可以看到返回的html代码(即服务端返回的响应正文) -
curl -v http://www.baidu.com >/dev/null
(">/dev/null" 表示将返回的内容重定向到linux空设备上)
执行上述命令,可以看到详细信息,>
标注的是request信息,包括请求行,请求头部,请求数据,<
标注的是response信息,包括状态行,信息报头,响应正文。
二、Nginx主配置etc/nginx/nginx.conf
详解
执行vi etc/nginx/nginx.conf
可以看到以下配置内容
user nginx ;
worker_processes 4;
error_log /var/log/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types
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" '
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
(1) user nginx
设置nginx 服务的系统使用用户, 默认即是nginx,可不设置
(2) worker_processes 4;
工作进程数, 一般设置为和cpu核数一样
(3) error_log /var/logs/error.log warn;
错误日志存放目录(主要用于Nginx处理http请求错误的状态,以及Nginx本身服务运行错误的状态 ), warn表示错误日志的级别
(4)pid /var/run/nginx.pid;
进程pid存放位置
(5) events
下的worker_connections
: 每个进程允许的最大连接数量(最大设至65535),use
: 工作进程数
http下的一些配置及其意义
(1) include /etc/nginx/mime.types;
文件扩展名与文件类型映射表
(2) default_type application/octet-stream;
默认文件类型
(3) log_format
用来设置日志格式,只能配置在http模块下。其中$remote_addr
、$remote_addr
等$
开头的都是Nginx中的变量,通过一些符号连接在一起,组成nginx的access_log日志格式。
-
$remote_addr
客户端地址 -
$remote_user
客户端请求Nginx认证的用户名,如果默认没有开启认证模块,将不会记录 -
$time_local
Nginx时间 -
$request
request头请求行 -
$status
response返回的状态码 -
$body_bytes_sent
服务端响应给客户端的body信息的大小 -
$http_referer
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理 -
$http_user_agent
http头信息的一部分, -
$http_x_forwarded_for
简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息
(4) access_log
指定日志文件的存放路径、格式和缓存大小,主要依赖于log_format的配置,记录到每次http请求的访问状态,后面的main与log_format main
中的main是对应的,表示将日志按log_format main
中的main的格式要求记录到access_log里
(5) sendfile on;
开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来 输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置 为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常 把这个改成off。
(6)tcp_nopush on;
防止网络阻塞
(7) autoindex on;
开启目录列表访问,合适下载服务器,默认关闭。
(8)keepalive_timeout 65;
长连接超时时间,单位是秒
(9)gzip on;
开启gzip压缩输出
(10) include /etc/nginx/conf.d/*.conf;
nginx读完etc/nginx/nginx.conf后,同时会读etc/nginx/conf.d/下所有的.conf文件(默认/etc/nginx/conf.d目录下只有一个default.conf文件)
三、配置文件 etc/nginx/conf.d/default.conf 详解
server{
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
(1) listen
该server 监听的端口
(2) server_name
服务名称(域名)
(3) location
一个server 可以有多个location,。
root
当某一个server里面没有其他的路径可以访问时 ,会默认访问该配置目录下的文件。
index
定义首页默认访问的是哪个文件, 如果index.html没有找到就会去找index.htm。
ls /usr/share/nginx/html
可以看到里面有两个50x.html 和index.html两个文件,如下图所示:
可以尝试修改index.html, 保存后用浏览器访问server 的 ip ( 执行
ip a
可以看到server的ip), 即可看到修改后的结果。(4)
error_page
定义当返回状态码是500,502,503,504时,返回错误页面50x.html,。50x.html 页面的位置在root /usr/share/nginx/html 中。可以做如下尝试:
先访问一个不存在的路径,发现返回了404页面。
然后在error_page中加入状态码404,再重启服务(
systemctl restart nginx.service
或systemctl reload nginx.service
),重新访问这个不存在的路径,发现返回了50x.html页面。
四 、Nginx变量
(1) HTTP请求变量
-
arg_PARAMETER
将arg_
+ http请求参数名作为一个变量 -
http_HEADER
request请求的HEAD -
sent_http_HEADER
服务端返回给客户端的response的HEAD
(2)内置变量
官网查看内置变量
(3)自定义变量