Nginx配置入门
基于ubuntu16.04 Desktop-LTS4
简介:¶
- 优点:
- 高并发:在一个
BSD-like
协议下发行,基于epoll
/kqueue
模型开发,支持高并发量- 内存消耗低: 于处理静态文件,相较于其他web(比如:
apache
),占用更少的内存及资源- 简单稳定: 配置简单(一个conf文件),运行简单(nginx命令),而且运行稳定
- 模块化程度高: 功能模块插件化设计,可以自由配置相应的功能
- 支持
Rwrite
重写规则: 能够根据域名,URL等请求关键点,实现定制化的高质量分发- 低成本:
Nginx
的负载均衡功能很强大而且免费开源,相较于几十万的硬件负载均衡器成本相当低。- 支持多系统:
Nginx
代码完全用C语言从头写成,可以在各系统上编译并使用
- 缺点:
- 动态处理差: nginx善于处理静态文件,但是处理动态页面相较于Apache之类重量级的web软件能力稍欠缺
- rewrite弱: 虽然nginx支持rewrite功能多,但是相较于Apache之类重量级的web软件能力稍欠缺
配置Nginx:¶
1. 安装
# 安装依赖
sudo apt-get install -y build-essential libssl-dev libtool libpcre3 libpcre3-dev make openssl zlib1g-dev
# 安装Nginx
sudo apt-get install nginx -y
2. 检查
3. 服务相关命令
systemctl start|stop|reload|... nginx
/etc/init.d/nginx start|stop|restart|... # 尽量使用这个命令来开启关闭,里面指明了一些配置信息
/usr/sbin/nginx ... #不推荐使用系统命令
4. Nginx相关命令
nginx -v 查看版本信息
nginx -s stop 停止 #不推荐用系统命令,这里执行的是 /usr/sbin/nginx
nginx -s reload 重启 #不推荐用系统命令,这里执行的是 /usr/sbin/nginx
nginx -t 检查默认配置文件
nginx -t -c file.conf 指定配置文件进行检查
5. 卸载
# 查看Nginx相关的软件
dpkg --get-selections|grep nginx
dpkg --list | grep nginx
# 进行卸载
apt-get --purge remove nginx
apt-get --purge remove nginx-common
apt-get --purge remove nginx-core
Nginx 配置路径:¶
1. Nginx软件目录:
工作目录: /etc/nginx
执行文件: /usr/sbin/nginx # 这属于系统命令的执行路径,不推荐使用此文件执行
日志目录: /var/log/nginx
启动文件: /etc/init.d/nginx # 尽量使用这个命令来开启关闭
web目录: /var/www/html/ # 存放静态文件 首页文件是index.nginx-debian.html
/usr/share/nginx/html/ #首页文件是index.html
2. Nginx配置文件
默认全局配置文件: 包含全局配置段,和http配置段,其中在http配置段中
include /etc/nginx/conf.d/*.conf;
表示我们自定义的子配置文件的路径,会首先进行处理, 在这个下面还有include /etc/nginx/sites-enabled/*;
表示如果我们自定义的配置无法满足请求,会在这个路径里的配置文件继续处理
- 其他配置文件路径: 文件内包含
server
配置,其中每个server
代表一个站点, 站点可以有不同的ip和端口,而每个server
中的location
可以代表一个请求路径
全局配置段¶
- user: 设置使用用户(worker)
- worker_processes: 进行增大并发连接数的处理,一般和cpu核心数量保持一致
- pid: nginx 服务启动时候 pid
- events: 定义事件相关的属性: worker_connections:一个进程可以同时处理的连接池数量; use: 选择内核模型
http配置段¶
- sendfile on: 开启高效文件传输模式
- tcp_nopush on: 防止网络阻塞
- tcp_nodelay on: 防止网络阻塞
- keepalive_timeout 120: 长连接超时时间,单位是秒
- default_type application/octet-stream: 默认文件类型
- gzip on: 开启 gzip 压缩输出
- include file_path.types; # 文件扩展名与文件类型映射表
server配置段¶
- server配置段最重要的属性是listen和server_name。它们都是用于匹配并处理请求的
1. listen属性¶
- 作用: 定义Server监听的ip和port,当ip/port匹配时候才进行下一步匹配
- 使用逻辑: 样式补全为IP:Port后进行匹配,如果有多个Server能匹配上,则按照Server_name继续匹配
形式 | 描述 | 示例 | 完整示例 |
---|---|---|---|
IP:Port | 地址精确表示样式 | listen 10.10.10.10:99 | listen 10.10.10.10:99 |
IP | 自动监听 IP:80地址 | listen 10.10.10.10:80 | listen 10.10.10.10:80 |
Port | 自动监听 全地址:Port | listen 99或 [::]:99 | listen 0.0.0.0:99 |
default_server | 自动使用默认的地址 | listen default_server | listen localhost:80 |
2. server_name属性¶
- 作用: 定义Server监听的域名,当域名匹配时候才进行下一步操作
- 使用逻辑: 优先使用完整样式,然后使用前缀正则样式,最后使用后缀正则样式,如果正则样式相同的时候,匹配最长,否则就走非法规则,非法域名指的是请求到该主机上一个不存在的IP或者域名
形式 | 完整样式 | 前缀正则样式 | 后缀正则样式 | 禁止非法域名或IP |
---|---|---|---|---|
形式 | www.example.com | *.example.com | www.example.* | _ |
3. root属性¶
- 作用:定义Server相应请求的html文件所在路径
- 表现形式: root /var/www/html;
4. index属性¶
- 作用:定义响应请求后返回的文件名称或格式
- 表现形式: index index.html index.htm index.nginx-debian.html;
5. return属性¶
- 作用:定义响应请求后返回的http状态码
- 表现形式: return 444;
location常见配置属性¶
- location主要是根据Server匹配到的请求路径和关键字去响应和处理
- optional_modifier是匹配条件,location_match是匹配的样式,{}是要执行的操作. 匹配条件主要有两种:普通字符串(literal string)和正则表达式(regular expression)
1. 匹配模式及顺序¶
-
- 先匹配普通字符串,将最精确的匹配暂时存储
-
- 然后按照配置文件中的声明顺序进行正则表达式匹配,只要匹配到一条正则表达式,则停止匹配,取正则表达式为匹配结果
-
- 如果所有正则表达式都匹配不上,则取1中存储的结果
-
- 如果普通字符串和正则表达式都匹配不上,则报404 NOT FOUND
location = /uri =开头表示精确前缀匹配,只有完全匹配才能生效
location ^~ /uri ^~开头表示普通字符串匹配上以后不再进行正则匹配
location ~ pattern ~开头表示区分大小写的正则匹配
location ~* pattern ~*开头表示不区分大小写的正则匹配
location /uri 不带任何修饰符,表示前缀匹配
location / 通用匹配,任何未匹配到其他location的请求都会匹配到。
2. uri和url¶
- 匹配指定的请求uri(请求uri不包含查询字符串,如http://localhost:8080/test?id=10,请求uri是/test)
- uri 代表请求的路径, uri 是url中的一部分
3. location常见动作¶
- 基本属性
location / {
root /var/www/html; # 指定响应请求的文件所在路径
index index.php index.html index.htm; # 指定响应请求的默认文件名称
expires 7d; # 指定响应请求的文件过期时间,一般用于静态文件
try_files $uri $uri/ =404; # 如果 root 指定的路径下有查找的文件,就返回,否则报错
}
- 临时跳转
- 目录列表
location /upload {
alias /var/www/upload; # 指定查看文件列表路径(绝对路径)
autoindex on; # 开启目录自动索引
autoindex_exact_size off; # 默认 on,显示文件确切大小(bytes)。 off 表示显示文件的大概大小(kB/MB/...)
autoindex_localtime on; # 默认 off,显示的文件时间为 GMT 时间。on 表示显示文件的服务器时间
}
注意:
该 alias 指定的目录下,不允许出现 index 属性指定的文件。
- 访问控制
location /nginx-status {
stub_status on; # 开启 nginx 的状态页面,默认关闭
allow 192.168.8.14; # 允许的访问地址
deny all; # 默认进制所有访问
}
注意:
该功能依赖于 ngx_http_stub_status_module 模块
4. location核心动作¶
- try_files指令,配合命名location,可以部分替代原本常用的rewrite配置方式,提高解析效率
- 语法:
- 作用
- 响应时按顺序查找file,找到则返回file内容,否则的话进行内部重定向(uri)或返回状态码(code)
- 示例
如果能找到指定的 uri 那么就返回相应的内容,否则的话返回错误状态码 404
try_files $uri $uri/ =404;
如果能找到指定的文件 1/2.html 那么就返回相应的内容,否则的话返回 6.html 文件内容
try_files /1.html /2.html /6.html;
如果能找到指定的 uri 那么就返回相应的内容,否则的话就内部重定向到后端名称为@backup 的 location
try_files $uri @backup;
- 注意点
- 如果最后一个地址是一个uri的话,那么这个uri必须是存在
root 和 alias 区别¶
- root 和 alias 所起的作用都是指定响应请求所用文件的路径,只是他们有些许的区别
- root 表示 location 匹配内容的相对路径
访问http://localhost/img/,nginx找/var/www/image/目录下的文件
- alias 表示 一个绝对路径,而且必须以"/"结尾
访问http://localhost/img/,nginx找/var/www/image/img/目录下的文件
proxy_pass¶
- 设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口号的形式
1. proxy_pass路径¶
假设访问的url是 http://domain.com/html/test.js
- 对于1来说 proxy.com 后面没有"/",表示"/html/" 请求(包括自己)后续的路径及其参数等关键字都由http://a.com/来处理,代理后变成了http://proxy.com/html/test.js
- 对 2来说 proxy.com 后面有"/",表示"/html/" 请求后续的路径及其参数等关键字都由 http://a.com/来处理,代理后变成了http://proxy.com/test.js