一、基本使用
1、常用命令
- nginx:启动 Nginx
- nginx -s stop:立刻停止 Nginx 服务
- nginx -s reload:重新加载配置文件
- nginx -s quit:平滑停止 Nginx 服务
- nginx -t:测试配置文件是否正确
- nginx -v:显示 Nginx 版本信息
- nginx -V:显示 Nginx 版本信息、编译器和配置参数的信息
二、docker运行nginx
1、运行和挂载
//nginx服务器静态资源目录: /usr/share/nginx/html
//nginx 配置文件目录: /etc/nginx/nginx.conf
//nginx log目录:/var/log/nginx
//挂载时自己先mkdir好目录和conf文件,50x.html 和 index.html也要先创建好。
mkdir conf conf.d html logs
nginx.conf放在conf
default.conf放在conf.d
docker run -d --name nginx -p 80:80
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf
-v $PWD/log:/var/log/nginx
-v $PWD/html:/usr/share/nginx/html
-v $PWD/conf.d/default.conf:/etc/nginx/conf.d/default.conf nginx:latest
//修改配置后,重新加载
docker exec -it nginx /etc/init.d/nginx reload
2、关于配置文件
自己需要先创建好nginx.conf
和default.conf
-
default.conf(子配置文件) 可以将一个虚拟主机的配置文件单独拿出来,避免nginx.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; } }
-
nginx.conf(主配置文件)
user nginx; worker_processes 1; error_log /var/log/nginx/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; #这里就包含default.conf文件进来了*/ }
三、配置文件
1、http请求头的host
Host
是 HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术。
举个例子:
一台服务器部署着多个网站,每个网站都有一个域名。也就出现了一个ip对应多个域名的情况。
那么,怎么来区分每次根据域名显示出不同的网站的内容呢?
这就用到了host字段了。
备注:
在http 1.1中不能缺失host字段,如果缺失, 服务器返回400 bad request,http1.1中不能缺失host字段,但host字段可以是空值。
在http 1.0中可以缺失host字段。
http_req_host:www.mylxs.com:90
server{
listen 90;
server_name www.mylxs.com;
}
server的匹配是包括域名+端口的;
2、配置文件基本结构
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
upstream
{
...
}
... #http全局块
}
1、全局块:配置影响nginx全局的指令。
一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。
有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。
6、upstream块:负载均衡配置,一个upstream块代表着一组可以用于负载均衡的服务器列表;
一个http块可以有多个server{}块;也可以有多个upstream{}块;
一个server{}块里面,自然也可以有多个location{}块,代表着一个域名下的,多个应用路径;(同个域名部署多个web应用)
3、nginx中的server_name
server_name 为虚拟服务器的识别路径。
不同的域名会通过请求头中的HOST字段,匹配到特定的server块,转发到对应的应用服务器中去。
server_name的作用简单的说就是,根据不同域名找到对应的应用服务器;
4、参数解析
-
proxy_pass:配置反向代理的路径。需要注意的是如果 proxy_pass 的 url 最后为/,则表示绝对路径。否则(不含变量下)表示相对路径,所有的路径都会被代理过去
-
upstream:配置负载均衡,upstream 默认是以轮询的方式进行负载,另外还支持四种模式,分别是:
- weight:权重,指定轮询的概率,weight 与访问概率成正比 - ip_hash:按照访问 IP 的 hash 结果值分配 - fair:按后端服务器响应时间进行分配,响应时间越短优先级别越高 - url_hash:按照访问 URL 的 hash 结果值分配
5、常见配置项
- 1、
$remote_addr
与 $http_x_forwarded_for 用以记录客户端的ip地址; - 2、
$remote_user
:用来记录客户端用户名称; - 3、
$time_local
: 用来记录访问时间与时区; - 4、
$request
: 用来记录请求的url与http协议; - 5、
$status
: 用来记录请求状态;成功是200; - 6、
$body_bytes_s ent
:记录发送给客户端文件主体内容大小; - 7、
$http_referer
:用来记录从那个页面链接访问过来的; - 8、
$http_user_agent
:记录客户端浏览器的相关信息;
6、其他
- 惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。
- 每个指令必须有分号结束。