Nginx学习总结

Posted 二狗和大喵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx学习总结相关的知识,希望对你有一定的参考价值。

nginx作用

1、路由功能(与微服务对应):域名/路径,进行路由选择后台服务器

2、负载功能(与高并发高可用对应):对后台服务器集群进行负载

Nginx学习总结(一)

3、静态服务器(比tomcat性能高很多):在mvvm模式中,充当文件读取职责

Nginx学习总结(一)

正向代理:为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。比如:代购行为

Nginx学习总结(一)

反向代理:以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端

Nginx学习总结(一)

Nginx模型概念:

master主要管理worker进程,包含

1.接收来自外界的信号,

2.向各worker进程发送信号,

3.监控worker进程的运行状态,

4.worker进程退出后(异常情况下),会自动重新启动新的worker进程。

worker进程主要完成的任务包括

1. 接收、传入并处理来自客户端的连接;

2. 提供反向代理及过滤功能;

  3. nginx任何能完成的其它任务;

Nginx学习总结(一)

Nginx.conf配置文件结构:

main(全局设置)

events设定nginx的工作模式及连接数上限

http 服务器相关属性

server(虚拟主机设置)

upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)

locationURL匹配特定位置后的设置)

Nginx学习总结(一)

Main模块解析

#user  nobody;  #主模块命令, 指定Nginxworker进程运行用户以及用户组,默认由nobody账号运行。

worker_processes  1;#指定Nginx要开启的进程数。

worker_rlimit_nofile 100000;  #worker进程的最大打开文件数限制

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid; #来指定进程id的存储文件位置。

events {

    use epoll;

    worker_connections  1024; #设置nginx每个进程最大的连接数默认是1024nginx最大的连接数max_client=worker_processes * worker_connections。进程最大连接数受到系统最大打开文件数的限制,需要设置ulimit

}

/*     error log:用来定义全局错设日志文件的路径和日志名称。日志输出级别有debuginfonoticewarnerrorcrit 可供选择,其中debug输出日志最为详细,面crit(严重)输出日志最少。默认是error

          event:设定nginx的工作模式及连接数上限,其中参数use用来指定nginx的工作模式(这里是epollepoll是多路复用IO(I/O Multiplexing)中的一种方式),nginx支持的工作模式有select ,poll,kqueue,epoll,rtsig,/dev/poll。其中selectpoll都是标准的工作模式,kqueueepoll是高效的工作模式,对于linux系统,epoll是首选。*/

http服务器相关属性的设置

http {

include       mime.types;  #主模块命令,对配置文件所包含文件的设定,相当于把部分设置放在别的地方,然后在包含进来,类似于JSPC语言头文件说明

default_type  application/octet-stream; 默认文件类型,当文件类型未定义时候就使用这类设置的。

# 指定nginx日志的格式

    #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  logs/access.log  main;

    sendfile        on;   #开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝。

    #tcp_nopush     on;  #开启TCP_NOPUSH套接字(sendfile开启时有用)

    keepalive_timeout  65;  #客户端连接超时时间

    #gzip  on;             设置是否开启gzip模块

server虚拟主机的配置

server {

        listen       80;   虚拟主机的服务端口

        server_name  localhost;   用来指定ip或者域名,多个域名用逗号分开

            root   html;                   虚拟主机的网页根目录

            index  index.html index.htm;   默认访问首页文件

        }

        #error_page  404       /404.html;   //定义404页面

        # redirect server error pages to the static page /50x.html        

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;   //定义50x路径

        }     

}

Server配置详解

Listen 这里一般监听端口,如果出现监听IP+端口,下面的server_name自动失效

如:listen       192.168.231.153:80;  此时server_name无效

Server_name 这里可以填IP,也可以hostnamehostname必须在服务端hosts里配置相关信息,否则报错)。

如:server_name abc.com; server_name 10.220.3.1;

Location语法规则location [=|~|~*|^~] /uri/ {… }

精准匹配: = 优先级最高

普通location:  无前缀“^~” 表示任何正则表达式将不会被读取。

普通匹配,即使是完全匹配,也不是精准匹配

正则location “~” 表示区分大小写; “~*” 表示不区分大小写; !~ 为区分大小写不匹配; !~* 为不区分大小写不匹配

Nginx学习总结(一)

Nginx执行过程

URL= 域名+端口+path+param

匹配过程(对照下面图文)

Nginx学习总结(一)

1、域名(ip+端口 ——》定位Server

2pathlocation部分匹配,path = 匹配path + 剩余path

如:URL=http://process.enjoy.com/nginx/enjoy/getInfo

http://process.enjoy.com命中server /nginx/enjoy= 命中路径  /getInfo = 剩余路径

命中路径在location里通过proxy后形成的URL变成了

http://172.17.0.4:8081/nginx/enjoy/getInfo

如这条url

http://process.enjoy.com/dynamic/nginx/enjoy/getInfo里面/dynamic,是被location匹配中的path1,因为proxy代理8081后面有/nginx转发时必须中传path2,舍弃path1

注意注意

            proxy_pass=http://172.17.0.4:8081/

    proxy_pass= ip:port/

ip:port/时,转发ip+端口+path2路径

ip:port 时,转发ip+端口+path1+path2路径 (没有/)

3rootalias设置server工作的根目录,相当于string rootPath = "/usr/local/html"

这里的rootPath就是安装Nginx时会初始化一个目录,如果Server里不配置root或者alias,将会把初始值当根目录目录建议使用绝对路径)

root:在目录里找path1+path2路径

         alias:在目录里找path2路径

例如:url----http://process.enjoy.com/target /a.html如下图

location匹配后,path1=/targetpath2=/a.html

alias方式是在目标html/static/文件夹内,查找路径path2= /a.html的文件。


以上是关于Nginx学习总结的主要内容,如果未能解决你的问题,请参考以下文章

Nginx学习总结

Nginx 学习笔记总结

Nginx 学习笔记总结

Nginx 学习笔记总结

Nginx学习总结

nginx配置学习总结