学习nginx(三):nginx.conf配置

1.基本配置(默认配置):

#user  nobody;          配置nginx worker进程所属用户及用户组,如果没有写组名,则默认组名和用户名一致,默认用户为nobody
worker_processes  1;    配置nginx worker进程数量,一般和机器CPU数量一致

以下是错误日志配置,logs/error.log是位置,notice、info是日志级别,该配置可以配置到任意上下文中
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
以下是pid文件配置,pid文件记录了master进程的PID
#pid        logs/nginx.pid;

以下是events上下文,记录了网络事件相关配置
events {
    以下配置了每个worker能处理的连接数,注意不能超过操作系统最大限制
    nginx实际处理的连接数为 worker_processes*worker_connections 
    worker_connections  1024;
}

以下是http上下文,记录了http事件相关配置
http {
    include       mime.types;   引入mime.types文件内的配置
    default_type  application/octet-stream;   配置默认MIME类型
    
    以下配置是配置日志格式
    #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;    是否允许调用sendfile函数
    #tcp_nopush     on;    是否允许TCP_NOPUSH类型的socket请求

    keepalive_timeout  65;   这两条是长连接超时时间配置

    #gzip  on;      是否开启gzip压缩

    以下是server上下文,用于配置虚拟主机
    server {
        listen       80;                 监听的端口,也可以配置为域名、文件路径等,可以同时监听多个对象
        server_name  localhost;          主机名

        #charset koi8-r;                 编码

        #access_log  logs/host.access.log  main;
        
        location上下文,用来配置特定uri的访问规则,这里的uri是根路径,支持正则表达式
        location / {
            #root代表请求映射到哪个路径,index代表页面配置
            root   html;
            index  index.html index.htm;
        }
        
        错误页面配置
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    HTTPS相关配置
    # 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;
    #    }
    #}

}

nginx的上下文主要有:

  • main:最外层,不像其它上下文需要显式写出名称和大括号,主要是nginx的系统配置
  • events:网络处理相关配置
  • http:http请求配置
    • upstream:反向代理配置,在http中
  • mail:smtp/imap/pop3请求配置
    • server:在http、mail之中,定义虚拟主机
      • location:server之中,定义uri配置

各上下文下面的配置是由各个模块定义的,非常复杂,请查阅官网文档或者源代码

例如http上下文的listen配置,官网显示其定义在ngx_http_core_module模块,去nginx源码的src/http/ngx_http_core_module.c文件,就能找到相关定义:

……
static ngx_command_t ngx_http_core_commands[] = {
……
{ ngx_string("listen"),
      NGX_HTTP_SRV_CONF|NGX_CONF_1MORE,
      ngx_http_core_listen,
      NGX_HTTP_SRV_CONF_OFFSET,
      0,
      NULL },
……

ngx_command_t实际就是ngx_command_s结构体(ngx_command_t在ngx_core.h中使用typedef定义,ngx_command_s在ngx_conf_file.c中定义),具体结构如下:

struct ngx_command_s {
    ngx_str_t             name;
    ngx_uint_t            type;
    char               *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
    ngx_uint_t            conf;
    ngx_uint_t            offset;
    void                 *post;
};

2.反向代理配置&重定向配置(以跳转百度为例)

#效果:访问服务器自动跳转百度首页
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    #反向代理配置,这里只配置了一项,如果有多个配置,就可以使用负载均衡
    upstream baidu {
        server www.baidu.com;
    }
    server {
        listen       80;
        server_name  localhost;
        #代理配置,主要是做跳转
        location / {
            proxy_pass http://baidu;
            proxy_set_header Host www.baidu.com;   #这里不能写$host,会出现403 forbidden错误
            proxy_redirect     off;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            proxy_max_temp_file_size 0;
            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

}

主要是加了upstream上下文,修改了 location / 上下文

如果这样修改效果一样(原理不一样):

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server {
        listen       80;
        server_name  localhost;
        rewrite ^/ http://www.baidu.com;
        index index.html;
    }

}

rewrite配置是把指定uri的请求进行重定向,这里是将根目录的请求重定向到百度首页。

如果

猜你喜欢

转载自blog.csdn.net/u010670411/article/details/84715167