Nginx配置详解 - niancan/doc GitHub Wiki

Nginx conf详解

  • main(全局配置)
  • events(nginx工作模式)
  • http(http设置)
  • sever(主机设置)
  • location(url匹配)
  • upstream(负载均衡配置)
user nobody nobody;                                   指定Nginx Worker进程运行用户以及用户组,默认由nobody帐号运行
worker_processes 2;                                   指定Nginx要开启的子进程数,每个Nginx进程平均消耗10-12MB内存,一般与CPU核数相同即可
error_log /usr/local/var/log/nginx/error.log notice;  定义全局错误日志文件
pid     /usr/local/var/run/nginx/nginx.pid            存储Nginx进程pid
worker_rlimit_nofile 1024;                            指定一个Nginx进程可以打开最多的文件描述符数目

events{
    use epoll;              #Nginx的工作模式,Nginx支持的工作模式有select poll kqueue epoll rtsig和dev/poll
                            #其中select和poll 都是标准的工作模式,kqueue和epoll是高效的工作模式,
                            #不同的是epoll用在Linux平台上,kqueue用在BSD系统中,对于Linux系统,opoll工作模式是首选
    
    work_connections 1024;  #用于定义Ninx每个进程的最大连接数,即接收前端的最大请求数,默认是1024,
                            #最大客户端连接数由worker_process和worker_connection决定,
                            #即Max_clients=worker_process*worker_connections,在作为反向代理时,
                            #Max_clents变为:Max_clients=worker_process*worker_connections/4,
                            #进程最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令" ulimit -n 65536"
                            #后"worker_connections"的设置才能生效
}
http{                                                                       #核心模块
    include        mime.types;                                              #支持的文件类型
    default_type application.octet-stream;                                  #默认的二进制流
    
    log_format main '$remote_add - $remote_user [$time_local] "$request"'   #日志格式
    '$status $body_bytes_sent "http_referer"'
    '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /usr/local/var/log/nginx/access.log main;                    #日志路径
    sendfile        on;                                                     #用于开启高效文件传输模式,
                                                                            #将tcp_nopush和tcp_nodelay2个指定设置为on用于防止网络阻塞
    tcp_nopush        on;
    tcp_nodelay        on;
    #gzip             on;
    keppalive_time  10                                                      #设置客户端连接保持活动的超时时间,超过这个时间之后,服务器会关闭该连接
    
    server{                                                  #http的子模块,
        listen    8080;                                      #监听的端口
        sever_name    localhost 192.168.12.10 www.baidu.com  #用来指定IP地址或者域名
        root    /Users/baidu/wwww;                           #程序的路径
        index  index.php index.html index.htm;               #定义入口文件
        charset utf-8;                                       #编码
        access_log usr/local/var/log/host.access.log main    #访问日志路径
        access_log usr/local/var/log/host.error.log error;   #错误日志路径
        location{
            ...
        }
    }
    server{
        ...
        location /{                                #localtion / 表示匹配访问根目录
            root /User/baidu/www;                  #web主目录
            index  index.php index.html index.htm; #入口文件
        }
        
        #反向代理配置
        location /itcast/{
            proxy_pass http://127.0.0.1:12345
            proxy_set_header X-real-ip $remote_add;
            proxy_set)header Host $http_host;
        }
        #采用uwsgi方式
        location /python/{
            include uswgi_params;
            uwsgi_pass 127.0.0.1:333;
        }
        #访问本机目录
        location /{
            root /home/itcatst/xwp/itcast/;
            index index.html index.htm;
        }
        
    }
    #负载均衡
    upstream myproject{
        ip_hash;                     #负载均衡调度算法Nginx支持4种算法
        weight轮询(默认)              #weight值越大,分配到的机率越高
        ip_hash                     #根据ip的hash结构分配,不能配置weight和backup
        fair                        #比上面2个更智能,根据响应时间短的优先分配,
                                    #nginx本身不支持fair,必须下载upstream_fair模块
        url_hash                    #根据url的hash结果来分配,需下载hash包
        
        server 192.168.123.1:80;
        server 192.168.123.1:80 down;        #downg表示当前server不参与负载均衡
        back 预留的备份机器
        server 192.168.123.1:80 max_fails=3 fail_timeout=20s;
        max_fails                           #允许请求失败的次数,默认为1
        fail_timeout                        #超时时间
        server 192.168.123.1:8080;
        }
    ...
}

Nginx反代和负载

upstream name{...}
upstrean mynet{
    server www.baidu.com;
    server www.baidu1.com;
    server www.baidu2.com;
}
server{
    location /{
        proxy_pass http://mynet;
    }
}