您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Nginx 配置初步(上)

本节的目标是了解 的基本配置。关于 的配置,主要是以下 5 个方面:

初始配置

基本语法

http 服务配置

tcp/udp

反向代理

每个部分其实有比较多的扩展,今天我们会讲解初始配置以及的基本语法,后续的 http 服务配置、tcp/udp 配置和反向代理配置会在下一节中介绍。

1. 初始配置

在前面搭建好 环境后,编译的 根路径为 /root/,那么对应的为 /root//conf/.conf ,直接用 cat 命令查看这里的(掉了原中的英文注释,并对主要配置项注释):

    $ cat /root//conf/.conf# 启动的worker进程数worker_processes  ;# 设置每个worker进程的最大连接数,它决定了的并发能力events {worker_connections  ;}# http块配置http {include      mime.types;default_type  application/octet-stream;# 注释了日志格式的配置,使用认...sendfile        on;# 重要参数,是请求完成之后还要保持连接多久,不是请求时间多久,# 目的是保持长连接,减少创建连接过程给系统带来的损耗keepalive_timeout  ;# server块配置server {# 监听80端口listen       ;server_name  localhost;# 匹配url /,会在html目录下,访问index.html或index.htmlocation / {root   html;index  index.html index.htm;}# 指定500  503 504出错的error_page        /50x.html;location = /50x.html {root   html;}}}

worker_processes 指令的参数,比如改为 2,再启动 ,观察 的进程,相比原来为 1 时的变化?

认会启动 Master 进程(也可以无 Master 启动),可以把 Master 可以看做是包工头,主要的工作就是招募工人( Worker 进程)并监督他们干活。worker_processes 指令用于控制 Worker 进程的数目,也就是所谓的工人数。我们用ps可以看到,当 worker_processes 指令参数为 2 时,worker 进程会变成 2 个。通常情况下,我们会把 worker 进程数会设置成系统的 核数(这里要看大家的机器配置而定)这样 worker 进程会分配到各个 核心上去执行请求处理,真正做到并行处理。

我们请求在上请求 80 端口,会出现 的认,也就是 html 目录下的那个 index.html ;另外直接访问http://localhost/50x.html 时候,会出现针对状态码为 50x 异常。接下来,我们简单的请求访问接口,模拟 500 异常,然后会将请求到这个异常。

在上述认配置的 server 块中,我们新的匹配路径,如下:

location /internal_error {return ;}

return 指令一般用于对请求的客户端直接返回响应状态码。在该作用域内 return 指令之后的所有 配置都是无效的。

可以使用在 server、location 以及 if 配置中。 除了跟状态码,还可以跟字符串或者 url ,比如写成这样的形式:

return  ‘hello, world’

这样,使用 -s reload 热加载 后,我们直接在浏览器中敲 http://ip/internal_error, 就可以看到50x的异常了。

2. 基本语法

接下来,我将会介绍 的通用语法,想深入学习一些指令的,可以多多上官网进行查阅。

例如前面的认 .conf 示例中,下面一行就是指令:

worker_processes  ;

而使用花括号包围起来的就是指令块,比如 http 指令块:

http {# 继续指令或者指令块,如http指令块可以server指令块...}

对于具体指令的参数、含义以及指令可以放入的指令块等信息都可以在官方查到;

这个在认的 .conf 中都有体现,如果是没有分号结尾启动 或者执行 -t 检查时会报错;

这个比较常用,因为在大型网站中使用 监听的端口比较多,同时也会存在各种复杂的请求处理,如果都写在同 .conf中,会使得 的变得异常复杂,难以维护。

此时,比较好的是使用 include,对进行按,或者按端口等任意的方式进行划分,将对应的处理指令写到另中,而主只要使用 include 指令包含该或者该所在的目录即可,比如如下的写法也是可以的:

include /etc//conf.d/*.conf;

使用 # 符号给注释可以提高的可读性, 这个和注释是道理。

有内置变量和变量两种。内置变量往往代表着客户端请求头的,如 $http_user_agent ,  $http_cookie 等。 的常用内置变量有:

我们准备三个,分别为主 .conf 和次 8080.conf、8088.conf,在 根目录下的 conf 目录中,新建 conf.d 目录,然后将 8080.conf、8088.conf 两个放到此处。通过cat命令查看三个,如下:

$ cat 8080.conf

server {listen       ;server_name   localhost;location / {default_type text/html;return  'hello, 8080\n';}}

$ cat 8088.conf

server {listen       ;server_name   localhost;location / {default_type text/html;return  'hello, 8088\n';}}

$ cat .conf

 ...http: {...server: {...# 前面的不变化,但是我们需要变化两个地方location / {default_type text/html;# 变量set $limit_rate 10k;return   '
                arg_a: $arg_a, arg_b: $arg_b, args: $argsconnection: $connection, connection_requests: $connection_requestscookie_a: $cookie_auri: $uri, document_uri: $document_uri, request_uri: $request_urirequest: $request , request_id: $request_idserver: $server_addr, $server_name, http_host: $http_host,limit_rate: $limit_rate, hostname: $hostname,content_length: $content_lengthstatus: $status, body_bytes_sent: $body_bytes_sent, bytes_sent: $bytes_senttime: $request_time, $msec, $time_iso, $time_local\n';}}...# 包含其他,了8080.conf和8088.confinclude conf.d/*.conf;}

准备好这三个三个后,直接启动 ,可以发现 服务分别监听了 80、8080 和 8088 端口。这说明 include 指令生效了,8080.conf、8088.conf 配置被包含进来了。

当然我们也可以去掉这个 include 指令再看看 会不会监听 8080 和 8088 端口,来个终极确认。最后我们在服务器上使用 curl 命令来模拟 Http 请求访问服务器的 8080 和 8088 端口,看是否会有对应的相应文本。最后请求 80 端口,带上相应的参数,具体操作以及打印结果如下:

[root@server ~]# cd /root//sbin# 如果服务已经启动,使用 -s reload 重新加载配置,否则直接使用 ./ 启动服务 [root@server sbin]# ./ -s reload[root@server sbin]# curl http://localhost:8080hello, [root@server sbin]# curl http://localhost:8088hello, # 一定要使用双引号包含整个URL,不然后面的b参数会被漏掉[root@server sbin]# curl "http://localhost:80?a=xxxx&b=yyyy"arg_a: xxxx, arg_b: yyyy, args: a=xxxx&b=yyyy 
    connection: , connection_requests:  
    cookie_a:   
    uri: /, document_uri: /, request_uri: /?a=xxxx&b=yyyy 
    request: GET /?a=xxxx&b=yyyy HTTP/ , request_id: 3784dd519727856c17b38e2ec9f2c8a1 server: ., , http_host: localhost, limit_rate: , hostname: server, 
    content_length:  
    status: , body_bytes_sent: , bytes_sent:  
    time: , , --11T18::+:, /Feb/::: +

3. 小结

今天我们简单了解了下 的以及相应的语法规则。但是我们仅仅简单介绍了 一些简单的语法并完成了几个简单的案例,接下来我们将简单学习 的 Http 配置以及反向代理等常用配置。


联系我
置顶