Nginx学习笔记(二)-Nginx配置文件解读

Scroll Down

Nginx学习笔记(二)-Nginx配置文件解读

Nginx的核⼼配置⽂件conf/nginx.conf包含三块内容:全局块、events块、http块

#======start 全局块开始================
#user  nobody;
#======启动的工作者线程数量是几个======
worker_processes  1;

#======错误日志及pid的文件位置,启动之后,nginx会生成一个文件名为端口号的文件===========
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#====end 全局快结束====================

#====events块start  events块主要影响nginx服务器与用户的网络连接,比如worker_connections 1024,标识每个workderprocess⽀持的最大连接数为1024=======
events {
    worker_connections  1024;
}
#====events块end=======

#====http块start   http块是配置最频繁的部分,虚拟主机的配置,监听端口的配置,请求转发、反向代理、负载均衡等=======
http {
#==== 引入mime类型定义文件======
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
	#====设置连接超市时间====
    keepalive_timeout  65;
	#====是否开启gzip压缩====
    #gzip  on;
	#====设置负载均衡====
	upstream demoServer{
		server 127.0.0.1:8084;
		server 127.0.0.1:8086;
	}
	
    server {
		#====需要监听的端口号===
        listen       9003;
		#====定义使用什么服务名访问===
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		#====请求转发====
        location / {
			#=====根目录位置
            root   html;
			#=====索引页
            index  index.html index.htm;
		#==== 将请求转发到具体的地址,这里引用上面的负载均衡配置名,即可达到负载均衡的效果===	
			proxy_pass http://demoServer/;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
		#====错误提示页面====
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

  • 全局块:从配置⽂件开始到events块之间的内容,此处的配置影响nginx服务器整体的运⾏,⽐如worker进程的数量、错误⽇志的位置等
  • events块:events块主要影响nginx服务器与⽤户的⽹络连接,⽐如worker_connections 1024,标识每个workderprocess⽀持的最⼤连接数为1024
  • http块:http块是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡等

Nginx反向代理的配置

image-20200623151831450

需求一:

  1. 部署tomcat,保持默认监听8080端⼝

  2. 修改nginx配置,并重新加载

    image-20200623152019273

  3. 重新加载nginx配置

    ./nginx -s reload

  4. 测试,访问http://111.229.248.243:9003,返回tomcat的⻚⾯

    image-20200623151921462

需求二:

  1. 再部署⼀台tomcat,保持默认监听8081端⼝

  2. 修改nginx配置,并重新加载

    image-20200623152032654

Nginx下location有多种表达式,优先级默认按照下列顺序

location的语法格式如下

location [=|~|~*|^~] /uri/ { … }
  1. 精确匹配 location = /abc{ }
  2. 匹配路径的前缀 location ^~ /abc{ }
  3. 不区分大小写的正则匹配 location ~* /abc{ }
  4. 正则匹配 location ~ /abc{ }
  5. 普通路径前缀匹配 location /abc{ }

Nginx的负载均衡策略与配置

image-20200623152329421

Nginx的负载均衡策略默认有多种,轮询,权重,ip_hash,最快响应时间(fair),URL 绑定(url_hash),最小连接数(least_conn)

  • 轮询:

    • 默认情况下 Nginx 服务器实现负载均衡的算法就是轮询,轮询策略按照顺序选择组内服务器处理请求。如果一个服务器在处理请求的过程中出现错误,请求会被顺次交给组内的下一个服务器进行处理,以此类推,直到返回正常的响应为止。但如果所有的组内服务器都出错,则返回最后一个服务器的处理结果。
  • upstream lagouServer{
    	server 111.229.248.243:8080;
    	server 111.229.248.243:8082;
    }
    location /abc {
    	proxy_pass http://lagouServer/;
    }
    
  • weight:

    • 组内服务器设置权重,权重值高的服务器被优先用于处理请求。此时组内服务器的选择策略为加权轮询。组内所有服务器的权重默认设置为 1,即采用轮询处理请求。
    upstream lagouServer{
    	server 111.229.248.243:8080 weight=1;
    	server 111.229.248.243:8082 weight=2;
    }
    
  • ip_hash:

    • ip_hash 用于实现会话保持功能,将某个客户端的多次请求定向到组内同一台服务器上,保证客户端与服务器之间建立稳定的会话。只有当服务器处于无效(down)的状态时,客户端请求才会被下一个服务器接收和处理。注意:使用 ip_hash 后不能使用 weight,ip_hash 和主要根据客户端 IP 地址分配服务器,因此在整个系统中,Nginx 服务器应该是处于最前端的服务器,这样才可以获取到客户端 IP 地址,否则它得到的 IP 地址将是位于它前面的服务器地址,从而就会产生问题。
    upstream lagouServer{
    	ip_hash;
    	server 111.229.248.243:8080;
    	server 111.229.248.243:8082;
    }
    
  • 最快响应时间(fair):

    • 智能调度算法,动态地根据后端服务器的处理处理效率和响应时间对请求进行均衡分配,响应时间短、处理效率高的服务器分配到请求的概率高,响应时间长、处理效率低的服务器分配到请求的概率低。使用这种算法需要安装 upstream_fair 模块。
  • URL 绑定(url_hash)

    • 按照访问的 URL 的 hash 结果分配请求,相同的 URL 会访问同一个后端服务器,在一定程度上可以提高缓存的效率。使用这种算法需要安装 Nginx 的 hash软件包。
  • 最小连接数(least_conn)

    • least_conn 用于为网络连接分配服务器组内的服务器,在功能上实现了最小连接数负载均衡算法,在选择组内的服务器时,考虑各服务器权重的同时,每次选择的都是当前网络连接最少的那台服务器,如果这样的服务器有多台,就采用加权轮询选择权重值大的服务器。

Nginx动静分离的配置

image-20200623152645433
nginx将静态文件的请求拦截并将其转发到静态文件的目录下加载

image-20200623152704703