• nginx入门之基础配置


    1、配置文件

    nginx 的配置文件是 /etc/nginx/nginx.conf,其目录结构大致为:

    main     #全局配置,对全局生效
    events { #nginx工作模式配置,配置影响 Nginx 服务器或与用户的网络连接
    }
    http {   #http设置,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
        ....
        server {    #服务器主机配置,配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
            ....
            location { # 路由配置server块可以包含多个location块,location指令用于匹配uri
                ....
            }
            location path {
                ....
            }
            location otherpath {
                ....
            }
        }
        server {
            ....
    
            location {
                ....
            }
        }
        upstream name {                    # 负载均衡配置
            ....
        }
    }
    

    配置语法:

    1. 每条配置以分号结尾;
    2. 指令快用 {} 将多条指令集合在一起;
    3. 可以使用 include 语句引进其它配置文件;
    4. 使用 # 添加注释;
    5. 视同 $ 使用变量;
    6. 部分指令参数支持正则;

    2、典型配置

    # 每个指令必须有分号结束
    user administrator administrators;  #配置用户或者组,默认为nobody nobody。
    worker_processes 2;  #允许生成的进程数,默认为1,一般设置和cpu核数一样
    pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
    #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
    error_log log/error.log debug; 
    events {
        accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
        multi_accept on;   #设置一个进程是否同时接受多个网络连接,默认为off
        #use epoll;        #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
        worker_connections  1024;    #最大连接数,默认为512
    }
    http {
        include       mime.types;   #文件扩展名与文件类型映射表
        default_type  application/octet-stream; #默认文件类型,默认为text/plain
        #access_log off; #取消服务日志    
        log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
        access_log log/access.log myFormat;  #combined为日志格式的默认值
        sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
        sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
        keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。
    
        upstream mysvr {   
          server 127.0.0.1:7878;
          server 192.168.10.121:3333 backup;  #热备
        }
        error_page 404 https://www.baidu.com; #错误页
        server {
            keepalive_requests 120; #单连接请求上限次数。
            listen       4545;   #监听端口
            server_name  127.0.0.1;   #监听地址       
            location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
               #root path;  #根目录
               #index vv.txt;  #设置默认页
               proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
               deny 127.0.0.1;  #拒绝的ip
               allow 172.18.5.54; #允许的ip           
            } 
        }
    }
    

    2.1、server配置

    需要注意 server 里面的 listen 和 server_name 的用法

    1. listen 并不是端口,可以使用ip接端口,但是这样就只能单一的匹配了,所以一般只写端口;
    2. 如果listen配置域名加端口,则 server_name 配置无意义;
    3. server_name 配置域名(ip),支持多个域名;

    初学者可能会有疑问,为什么需要支持多个域名/IP,反正进入到nginx里面的,肯定是服务器的IP。

    因为

    1. 一台服务器是可以配置多个IP的;
    2. 一个ip是可以绑定多个域名的;

    3、全局变量

    nginx 有一些常用的全局变量,可以在配置文件中的任意位置使用

    全局变量 描述
    $host 请求信息中的HOST,如果没有,则等于设置的服务器名,不包含端口
    $request_method 客户端请求类型,GET/POST等
    $remote_addr 客户端IP
    $args 请求中的参数
    $arg_PARAMETER GET请求中变量PARAMETER参数值
    如$http_user_agent(Uaer-Agent值)
    $content_length 请求头中的 Content-length 字段
    $http_user_agent 客户端agent信息
    $http_cookie 客户端cookie信息
    $remote_addr 客户端的IP地址
    $remote_port 客户端的端口
    $server_protocol 请求使用的协议,如HTTP/1.0
    $server_addr 服务器地址
    $server_name 服务器名称
    $server_port 服务器端口
    $scheme HTTP方法(如http、https)

    4、配置代理

    server {
    	listen       8081;
    	server_name  localhost;
    
    	location / {
    		proxy_pass http://192.168.54.139;
    	}
    }
    

    上例中,如果请求的ip和端口匹配到,则请求会转发到 http://192.168.54.139

    4.1、反向代理配置

    两个域名指向同一台nginx服务器,用户访问不同的路径,显示不同的内容

    server {
    	listen       8081;
    	server_name  localhost;
    
    	location ~ /edu/ {
    		proxy_pass http://www.baidu.com;
    	}
    	location ~ /vod/ {
    		proxy_pass http://www.qq.com;
    	}
    }
    

    上例中,localhost:8081/edu 和 localhost/8081/vod 请求分别转达到不同的服务器

    当然,也可以配置多个server

    upstream tomcat1{
    	server 192.168.10.182:80;
    }
    server {
    	listen       80;
    	server_name  www.123.com;
    
    	location / {
    		proxy_pass http://tomcat1;
    	}
    }
    upstream tomcat1{
    	server 192.168.10.182:81;
    }
    server {
    	listen       80;
    	server_name  www.456.com;
    
    	location / {
    		proxy_pass http://tomcat2;
    	}
    }
    

    上例中,可以修改host文件实现域名和ip的映射

    5、负载均衡

    5.1、轮询

    upstream tomcat2 {
    	server 192.168.10.182:8081;
    	server 192.168.10.182:8082;
    	server 192.168.10.182:8083;
    }
    server {
    	listen			80;
    	server_name		www.123.com;
    	
    	location / {
    		proxy_pass	http://tomcat2;
    	}
    }
    

    轮询默认权重都是1,服务器请求的默认顺序是123123123

    5.2、加权轮询

    upstream tomcat2 {
    	server 192.168.10.182:8081;
    	server 192.168.10.182:8082 weight=2;
    	server 192.168.10.182:8083;
    }
    

    上例中,为一个服务提供了三台服务器来实现负载均衡

    可根据服务器的配置情况调整权重,不配置则默认1,权重越低,请求越少。

    5.3、热备

    upstream tomcat2 {
    	server 192.168.10.182:8081;
    	server 192.168.10.182:8082 backup;
    }
    

    当第一台服务器出问题时,启用第二台服务器,顺序是1111111,1挂了,22222

    5.4、ip_hash

    upstream tomcat2 {
    	server 192.168.10.182:8081;
    	server 192.168.10.182:8082;
    	ip_hash;
    }
    

    nginx 会让相同客户端ip请求相同的服务器

    5.5、其它参数

    nginx的负载均衡还有一些其它状态参数详解,比如:

    1. down:表示当前的server暂时不参与负载均衡;
    2. backup:预留的备份及其,其它非备份及其出现故障或者忙的时候,才会请求备份及其,因此,此及其压力最轻;
    3. max_fails:允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误;
    4. fail_timeout:在经历了max_fails次失败之后,暂停服务的时间,max_fails可以和fail_timeout一起使用;

    示例:

    upstream tomcat2 {
    	server 192.168.10.182:8081 weight=2 max_fails=2 fail_timeout=2;
    	server 192.168.10.182:8082 weight=1 max_fails=2 fail_timeout=1;
    }
    
  • 相关阅读:
    Java中用Apache POI生成excel和word文档
    openlayers实现画圆
    openlayers实现wfs属性查询和空间查询
    jquery自定义控件拖拽框dragbox
    基于openlayers实现聚类统计展示
    openlayers实现在线编辑
    openlayers之selectfeature
    J
    HDU-1051Wooden Sticks
    HDU-1087Super Jumping! Jumping! Jumping!
  • 原文地址:https://www.cnblogs.com/sherlock-lin/p/13413496.html
Copyright © 2020-2023  润新知