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.gz
      cd 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等数量




posted on 2020-08-02 15:53  不浮泛  阅读(136)  评论(0编辑  收藏  举报

导航