# Nginx 快速入门

配置

默认情况下,nginx.conf 被放置在目录 /usr/local/nginx/conf, /etc/nginx or /usr/local/etc/nginx

命令

启动命令:

安装主目录的./sbin/nginx 或 nginx

nginx启动之后 一般使用如下命令语法来控制nginx服务:

nginx -s signal

signal 有下面几种:

  • stop — 快速关闭
  • quit — 优雅地关闭,会把当前处理的请求处理完后再退出服务
  • reload — 重新加载配置文件,会检查语法,然后启动新的worker进程和通知旧的worker进程关闭,旧的进程会优雅的关闭
  • reopen — 重新打开日志文件

配置文件语法

静态内容

Web 服务器的一个重要的任务就是文件服务(例如图片和静态HTML网页)

nginx.conf 中的http相关内容注释掉,然后添加配置 server 区块

http {
    server {}
}

一般情况下,一个配置文件可能包括了几个 server 区块,只是端口或者服务名不同

server 区块中添加 location 区块,如下:

location / {
    root /data/www;
}

使用了 root 指令,匹配前缀 /,URI后面的会添加到 /data/www,也就是当请求 GET /index.html ,就会返回文件 /data/www/index.html

然后添加另一个 location 区块:

location /images/ {
    root /data;
}

它将会匹配请求中开始于 /images/ 的URL(也会匹配到 location /,但是会使用匹配最长的那个location)。

最后配置文件像这样:

http {
    server {
        location / {
            root /data/www;
        }
        location /images/ {
            root /data;
        }
    }
}

应用于这个配置的服务默认端口是80,所以可以使用 http://localhost/ 来访问。当请求URI起始于/images/ 服务将返回服务器上 /data/images目录上面的文件,如果没有找到就返回404错误。例如,当请求http://localhost/images/examp... ,服务将会发送文件 /data/images/example.png 。同样的,当请求 http://localhost/some/example... 将返回文件 /data/www/some/example.html

简单代理服务

nginx一个比较常用的功能是作为代理服务器。我们将使用两个server配置来讲解,这两个server配置在同一个nginx实例中。

首先定义一个被代理的服务:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这个服务将监听8080端口(之前 listen 指令没有指定,默认会使用80端口)。创建 /data/up1目录,并在该目录下创建一个index.html。这个服务直接代理/data/up1目录下的静态内容。注意到root指令被放置在server上下文中,当location没有指定root时候会使用,否则使用 location内的。

接下来,我们定义代理服务:

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

第一个location区块中,proxy_pass指令指定了被代理的服务,这里是http://localhost:8080。我们将修改第二个location区块,即前缀/images/的location,如下:

location ~ \.(gif|jpg|png)$ {
    root /data/images;
}

这是一个匹配所有URI中以.gif.jpg 或者 .png 结尾的正则表达式。正则表达式应以开头。所有匹配的请求会被映射到 /data/images 目录。

最后配置文件会像这样:

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

这个服务将会将以.gif.jpg 或者 .png直接映射到 /data/images目录,其他的所有请求交给被代理的服务,这里是http://localhost:8080

完整配置:

events {
    worker_connections  1024;
}

http {
    server {
        listen 8080;
        root /data/www;
        
        location / {
        }
    }
    
    server {
        location / {
            proxy_pass http://localhost:8080;
        }
        
        location ~ \.(jpg|png|gif)$ {
            root /data/images;
        }
    }
}

向nginx服务发送 reload 信号重新加载配置,即nginx -s reload


shepherd_fx
25 声望1 粉丝

贵在坚持