nginx配置理解
- Nginx部署
- 安装Nginx软件及其依赖软件 、
yum install -y gcc gcc-c++
yum -y install openssl openssl-devel
.安装PCRE库 tar -zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure
make && make install
安装SSL库
安装zlib库存 - 安装nginx
cd /usr/local/
wget http://nginx.org/download/nginx-1.8.0.tar.gz
解压nginx包 tar -zxvf nginx-1.8.0.tar.gzcd nginx-1.8.0 ./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with- http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module
make && make install
--with-pcre=/usr/local/pcre-8.36 指的是pcre-8.36 的源码路径。--with-zlib=/usr/local/zlib-1.2.8 指的是zlib-1.2.8 的源码路径。
* 启动
/usr/local/nginx/sbin/nginx
* 检查效果:
`netstat -tnulp | grep nginx`
* 相关命令
systemctl start|stop|reload|... nginx
/etc/init.d/nginx start|stop|reload|...
/usr/sbin/nginx ...
nginx -V
* nginx的配置简介
进入目录
nginx/nginx.conf
![](https://img2020.cnblogs.com/blog/1639063/202008/1639063-20200802150637951-758642978.png)
* 访问原理
浏览器输入域名加上根,请求到配置文件中的location的根匹配上,根据location请求到对应的地址,静态文件直接返回,如果是负载均衡的方式,则通过proxy_pass请求到upstream地址。
若是location直接写upstream地址则直接访问,若是该地址后面带着/或者/params/等参数,其机制为请求到该后端地址的这根上。
![](https://img2020.cnblogs.com/blog/1639063/202008/1639063-20200802151555818-1559409690.png)
* http配置段*
主要配置server通用的一些配置
include mime.types; # 文件扩展名与文件类型映射表
default_type application/octet-stream; # 默认文件类型
sendfile on; # 开启高效文件传输模式。
autoindex on; # 开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; # 防止网络阻塞
tcp_nodelay on; # 防止网络阻塞
keepalive_timeout 120; # 长连接超时时间,单位是秒
gzip on; # 开启gzip压缩输出
Server常见配置属性
常见样式
server {
listen 端口;
server_name 主机名;
...
}
server配置段最重要的属性是listen和server_name。它们都是用于匹配并处理请求的。
server_name属性
作用:定义Server监听的域名,当域名匹配时候才进行下一步操作
表现形式:
格式 完整样式 前缀正则样式 后缀正则样式 禁止非法域名或IP
形式 www.example.com *.example.com www.example.* _
使用原则:
优先使用完整样式,然后使用前缀正则样式,最后使用后缀正则样式,如果正则样式相同的时候,匹配最长,否则就走非法规则
root属性
作用:定义Server相应请求的html文件所在路径
表现形式:
root /var/www/html;
index属性
作用:定义响应请求后返回的文件名称或格式
表现形式:
index index.html index.htm index.nginx-debian.html;
return属性
作用:定义响应请求后返回的http状态码
表现形式:
return 444;
location匹配属性
![](https://img2020.cnblogs.com/blog/1639063/202008/1639063-20200802153016605-1820455585.png)
* **location常见动作:**
在location内部常用的功能属性非常多,常见的基本属性、临时跳转、访问控制、目录列表等。
基本属性
location / {
root /var/www/html; # 指定响应请求的文件所在路径
index index.php index.html index.htm; # 指定响应请求的默认文件名称
expires 7d; # 指定响应请求的文件过期时间,一般用于静态文件
try_files $uri $uri/ =404; # 如果root指定的路径下有查找的文件,就返回,否则报错
}
临时跳转
location = /test/ {
return 302 http://sswang.com/; # 访问旧url的时候,临时跳转到新url,两个url均不失效
}
访问控制
location /nginx-status {
stub_status on; # 开启nginx的状态页面,默认关闭
allow 192.168.8.14; # 允许的访问地址
deny all; # 默认进制所有访问
}
注意:
该功能依赖于ngx_http_stub_status_module 模块(默认没有安装,需要定制化安装)
location /upload {
alias /var/www/upload; # 指定查看文件列表路径(绝对路径)
}
该alias指定的目录下,不允许出现index属性指定的文件
* **root VS alias**
root 和 alias 所起的作用都是指定响应请求所用文件的路径,只是他们有些许的区别
root 表示 location 匹配内容的**相对路径**
alias 表示 一个**绝对路径**,而且必须以"/"结尾
一般情况下,在location /中配置root,在location /other中配置alias
效果一: 效果二:
location /img/ { location /img/ {
alias /var/www/image/; root /var/www/image;
}
}
效果一:访问http://localhost/img/,nginx找/var/www/image/目录下的文件 绝对路径
效果二:访问http://localhost/img/,nginx找/var/www/image/img/目录下的文件 相对路径
* nginx反向代理
proxy_pass和proxy_set_header属性
- location / {
- proxy_pass http://localhost:8000; # 设定请求跳转后的地址,可以使用hostname或IP:Port形式
- proxy_set_header X-Real-IP $remote_addr; # 后端请求携带原始请求的真实IP地址
}
proxy_pass 指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口号的形式
proxy_pass后面的路径最后的/作用很重要!!!
location /html/ {
1 proxy_pass http://proxy.com;
2 proxy_pass http://proxy.com/;
}
假设我们访问的url是 **http://domain.com/html/test.js**,如何理解上述两种proxy_pass的区别呢?
对于 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** **会用/覆盖到路径/html/**
负载均衡upstream模块
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
}
server {
location / {
proxy_pass http://backend; #会转发到upstream,upstream会转发到server(应用服务)
}
}
upstream {} 和 Server {} 两部分内容属于平级关系。
出现504等内容可以在upstream里面设置keepalive等长连接的内容,根据虚拟机内核参数设置request 8192等数量