nginx 配置简介

2018-10-31  本文已影响0人  m风满楼
一:下载并编译nginx

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

二:configure详解

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

三 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;
        #}
    }

配置项中使用变量
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;
    }
}

上一篇 下一篇

猜你喜欢

热点阅读