美文网首页
nginx 配置简介

nginx 配置简介

作者: m风满楼 | 来源:发表于2018-10-31 23:20 被阅读0次
    一:下载并编译nginx

    wget http://nginx.org/download/nginx-1.1.0.tar.gz
    ./configure
    make &&make install

    • configure命令可以检测操作系统已经安装的软件,参数解析,生成中间目录,以及根据各种参数s生成一些C源码文件和Makefile文件。
    • make根据configure生成的Makefile文件编译工程,生成最终的目标文件,二进制文件。
    • make install根据configure执行时参数将nginx部署到指定的安装目录,包括相关目录的建立和二进制文件,配置文件的复制。
    二:configure详解

    可以使用./configure --help命令查看configure包含的参数,configure相关参数在另一篇文章configure参数详解中介绍。

    三 nginx命令行命令
    • /usr/local/nginx/sbin/nginx -c xxx/nginx/conf加载指定位置的nginx配置文件
    • /usr/local/nginx/sbin/nginx -t测试配置是否有错
    • /usr/local/nginx/sbin/nginx -V测试编译阶段的参数
    • /usr/local/nginx/sbin/nginx -s stop快速停止服务(和kill效果相同)
    • /usr/local/nginx/sbin/nginx -s quit优雅的停止服务(处理完所有请求后才退出)
    • /usr/local/nginx/sbin/nginx -s reload 重新加载配置文件并生效(nginx会先测试配置文件是否有误,如果全部正确,则优雅的关闭nginx后重启)

    一:nginx的配置

    使用nginx的模块,仅仅需要修改配置文件即可,所以下面简述nginx的配置文件

    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {  #events是一个配置项名,配置项名必须是nginx的某个想要处理的,否则报错
        worker_connections  1024;
    }
    
    
    http {
        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  on;
    
        server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            #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;
            #}
        }
    
    
    配置项中使用变量
    • 有些模块支持变量,要注意这种变量不是全局通用的
    • 在使用configure编译nginx的时候虽然已经把模块编译到nginx中,但是是否使用该模块取决于nginx.conf文件中有没有配置使用该模块
    nginx基本配置
    • nginx在运行的时候,必须加载几个核心模块和一个事件类模块,所有其他模块运行都依赖于这些模块,这些配置可以分为四类:
      • 用于调试定位问题的配置项
      • 正常运行的必备配置项
      • 优化性能配置项
      • 事件类型配置项
    • 有些配置项虽然没有显示配置,但是在有自己默认值,需要注意这种情况。
    1. 用于调试定位的配置项
      daemon off/on是否以守护进程运行
      master_worker off/on 是否以master/worker方式运行
      errorlog path/file level 日志配置
      debug_point [stop|abort] 是否处理几个特殊调试点(nginx在一些关键逻辑设置了调试点,当nginx执行到这些调试点的时候会发出SITSTOP信号)
      debug_connection[IP|CIDR] 仅对指定用户客户端输出DEBUG级别的日志(使用该配置前需要在执行configure时加入--with-debug参数)
      worker_rlimit_core_size 1024M; 执行core文件大小
      working_directory path ; 执行core文件存储目录
    
    1. 正常运行配置项
    env var=temp ;定义环境变量
    include pathfile ;嵌入其他配置文件
    pid path/file ;pid文件路径
    user username[groupname] ; nginx worker进程运行的用户及用户组
    worker_rlimit_nofile ;指定nginx每个worker进程可打开的最大文件描述符数
    worker_rlimit_sigpending limit; 限制信号队列
    
    1. 优化性能配置项
    worker_process 1(默认); nginx worker进程的个数(最好和CPU相同)
    worker_cpu_affinity cpumask ;绑定worker到指定CPU
    ssl_engine device ;ssl硬件加速
    worker_priority nice; worker优先级
    
    1. 事件类配置项
    accept_mutex off/on ;是否打开accept锁(负载均衡锁)
    lock_file path/file ;
    worker_connection number; 每个worker建立的最大连接数
    
    一个http静态服务器示例

    配置一个http服务器nginx提供了很多配置项,包括,虚拟主机的分发,文件路径的定义,内存磁盘资源分配,网络设置,MIME类型设置,对客户请求的限制,文件操作优化,对客户端请求的特殊处理。
    下面分别说明:

    1. nginx可以通过server块来定义虚拟主机,每个server块表示一台虚拟主机,这样使得不同的域名可以被转发到相同IP的服务器上面。
    listen address:port ;监听地址和端口
        #listen指令还有很多其余参数,用时可查询官方文档
    server_name "xxx";后面可以跟多个主机
    //server_name,在开始处理一个HTTP请求时,Nginx会取出header头中的Host,与每个server中的server_name进行匹配,以此决定到底由哪个server块来处理这个请求。
    server_name_hash_bucket_size  10M;设置每个桶占用内存的大小
    location [正则] ;location会根据用户请求的uri来匹配正则中表达式,可以匹配就选择location块中的配置来处理用户请求。
    
    1. 文件路径定义
    1. root xxx ; //以root方式设置资源路径,表示资源根目录
    示例:
    location /download/{
        root webroot ;
    }
    若请求URI为/download/index/test.html,对应于服务器地址则为 webroot/download/index/test.html
    
    2. alias path ;   设置资源路径的第二种方式,只能用在location块中
    示例:
    location /conf/{
        alias /www/conf/ ;
    }
    请求为/conf/test.html使用alias得到的服务器路径是/www/conf/test.html
    使用root则可以如下:
    location /conf/{
        root /www/ ;
    }注:实际上alias会将匹配到的匹配到的location中的这一段字符串丢弃。
    3. index index.html设置首页 ,访问/(根目录)的时候会访问该资源,可以跟多个,按照顺序访问。
    4. err_page 404 error.html 根据http状态吗重定向到设置 的页面(当前为error.html)
    
    1. 内存和资源分配
    1.connection_pool_size 256;
    nginx对每个成功建立TCP连接的socket预先分配一个内存池,
    2. request_pool_size 4k ;
    nginx开始处理请求时,会为每个请求分配一个内存池
    上述两个配置可以减少内核对小块内存的分配次数
    
    1. 网络相关参数
    1. reset_timeout_connection off;用户连接超时后是否直接向用户发送reset并释放连接(不等待time_out超时结束),该配置可以避免服务器产生很多的TIME_WAIT类的连接。
    2. keep_alive_timeout 75  ;keep_alive 超时时间
    3. keepalive_request 100 ;一个keepalive允许承载的最大请求数
    
    1. MIME配置
    2. 对客户端请求的限制
    1. limit_except_methos {}  限制用户请求的方法
    2. limit rate 0 ; 对客户端限制每s请求的字节数,0为不限速。 
    
    1. 文件操作的优化
    1. sendfile off; sendfile系统调用 (提高发送文件的效率)
    2. AIO off ; 是否启用内核级别的异步IO(与sendfile互斥)
    。。。
    
    1. 对客户端请求的特殊处理
    resolve address  ; 设置DNS域名解析的服务器地址
    

    9 ngx_http_core_module提供的变量
    HTTP模块为用户提供了丰富的变量,例如arg_parameter这样的变量可以取到url请求中参数为parameter的变量值。

    参数名称 注释
    $arg_PARAMETER HTTP 请求中某个参数的值,如/index.php?site=www.ttlsa.com,可以用$arg_site取得www.ttlsa.com这个值.
    $args HTTP 请求中的完整参数。例如,在请求/index.php?width=400&height=200 中,$args表示字符串width=400&height=200.
    $binary_remote_addr 二进制格式的客户端地址。例如:\x0A\xE0B\x0E
    $body_bytes_sent 表示在向客户端发送的http响应中,包体部分的字节数
    $content_length 表示客户端请求头部中的Content-Length 字段
    $content_type 表示客户端请求头部中的Content-Type 字段
    $cookie_COOKIE 表示在客户端请求头部中的cookie 字段
    $document_root 表示当前请求所使用的root 配置项的值
    $uri 表示当前请求的URI,不带任何参数
    $document_uri 与$uri 含义相同
    $request_uri 表示客户端发来的原始请求URI,带完整的参数。$uri和$document_uri未必是用户的原始请求,在内部重定向后可能是重定向后的URI,而$request_uri 永远不会改变,始终是客户端的原始URI.
    $host 表示客户端请求头部中的Host字段。如果Host字段不存在,则以实际处理的server(虚拟主机)名称代替。如果Host字段中带有端口,如IP:PORT,那么$host是去掉端口的,它的值为IP。$host 是全小写的。这些特性与http_HEADER中的http_host不同,http_host只取出Host头部对应的值。 
    $hostname 表示 Nginx所在机器的名称,与 gethostbyname调用返回的值相同 
    $http_HEADER 表示当前 HTTP请求中相应头部的值。HEADER名称全小写。例如,示请求中 Host头部对应的值 用 $http_host表 
    $sent_http_HEADER 表示返回客户端的 HTTP响应中相应头部的值。HEADER名称全小写。例如,用 $sent_ http_content_type表示响应中 Content-Type头部对应的值 
    $is_args 表示请求中的 URI是否带参数,如果带参数,$is_args值为 ?,如果不带参数,则是空字符串 
    $limit_rate 表示当前连接的限速是多少,0表示无限速 
    $nginx_version 表示当前 Nginx的版本号 
    $query_string 请求 URI中的参数,与 $args相同,然而 $query_string是只读的不会改变 
    $remote_addr 表示客户端的地址 
    $remote_port 表示客户端连接使用的端口 
    $remote_user 表示使用 Auth Basic Module时定义的用户名 
    $request_filename 表示用户请求中的 URI经过 root或 alias转换后的文件路径 
    $request_body 表示 HTTP请求中的包体,该参数只在 proxy_pass或 fastcgi_pass中有意义 
    $request_body_file 表示 HTTP请求中的包体存储的临时文件名 
    $request_completion 当请求已经全部完成时,其值为 “ok”。若没有完成,就要返回客户端,则其值为空字符串;或者在断点续传等情况下使用 HTTP range访问的并不是文件的最后一块,那么其值也是空字符串。
    $request_method 表示 HTTP请求的方法名,如 GET、PUT、POST等 
    $scheme 表示 HTTP scheme,如在请求 https://nginx.com/中表示 https 
    $server_addr 表示服务器地址 
    $server_name 表示服务器名称 
    $server_port 表示服务器端口 
    $server_protocol 表示服务器向客户端发送响应的协议,如 HTTP/1.1或 HTTP/1.0
    
    使用http proxy module配置一个反向代理服务器

    nginx作为反向代理服务器:当nginx接受一个HTTP请求的时候,先把用户的请求完整的接收到所在服务器硬盘或内存中,然后再向上游服务器发起连接。当从上游服务器接收到内容时,则不缓存,而是边接受边转发到客户端。

    1. 负载均衡和反向代理基本配置
      upstream 定义一个负载均衡集群,便于反向代理中proxy_pass使用。
      proxy_pass 将当前请求反向代理到URL指定的服务器,URL,可以是IP加端口或upstream块。
      proxy_method 表示反向代理的请求方法

    示例:

    upstream  server01   //表示一个负载均衡上游服务器集群
    {
        server   10.0.1.50:8080;  //指定集群中一台上游服务器
        server   10.0.1.51:8080;
    }
    server
    {
        listen  80;
        server_name  www.linuxidc.com;
     
        location / {
            proxy_pass        server01;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For          
            $proxy_add_x_forwarded_for;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:nginx 配置简介

          本文链接:https://www.haomeiwen.com/subject/khratqtx.html