启动, 停止, 和重新加载配置文件
启动的时候直接运行nginx.exe或者nginx。如果nginx已经启动,就可以直接使用参数-s 来进行调用执行,具体的使用语法如下:
nginx -s [signal]
signal 的位置可以是如下参数:
-
stop — 指令一经发出,直接停止
-
quit — 等待所有的请求完成,再停止
-
reload — 重新加载配置文件nginx.conf
-
reopen —重新打开日志文件
例如,想要停止nginx进程,(等待当前所有的请求进程全部完成),可以使用如下命令:
nginx -s quit
reload或重启nginx,修改的配置文件才会被应用。
nginx -s reload
一旦主进程收到reload的信号,它就会检查新的配置文件语法,并且尝试应用这个新的配置文件。如果执行成功,主进程会启用一个新的工作进程,然后给原来工作进程发送一个信号,让它原来的工作进程停止。如果执行失败,主进程会回滚到原来的配置文件并继续使用原来的配置文件进行执行。原来的工作进程接收到停止命令之后,它会停止新的连接请求,但是当前已经建立的连接请求会等待其完成后终止。之后旧进程就会退出。
杀死进程:
kill -s quit 进程ID
为了得到正在运行的ngixn进程列表,可以通过ps指令得到:
ps -ax | grep nginx
配置文件结构
指令分为简单指令和块指令。一个简单的指令由名称和参数组成,这些名称和参数由空格分隔,并以分号(;)结尾。块指令具有与简单指令相同的结构,但它的结尾不是分号,而是一组由大括号({ })包围的附加指令。一行中在#符号后面的是注释。
提供静态资源内容
首先,创建一个文件夹/data/www 把有内容的index.html 文件放到里面。并且创建/data/images文件夹,在里面放一些图片。
第二步,打开配置文件。默认的配置文件已经包含了几个server块指令,但是被注释了,现在把这些server块指令放开注释。
http {
server {
}
}
配置文件包含几个server块指令,这些块指令通过不同的服务名字(server names)分发监听(distinguished listen)在不同的端口。一旦nginx决定哪个服务器处理请求,它就会根据server块指令中定义的location指令的参数匹配请求头中指定的URI。
在server块指令中添加location指令:
server { location / { root /data/html; } }
这个location块详述了与URI请求相匹配的“/”前缀。如果匹配到请求,这个 URI 会被转到 root 指令的路径(/data/html)。如果有多个匹配的location块,nginx会选择最长前缀的那个。
server { location / { root /data/html; } location /images/ { root /data; } }
一个正常的服务器配置文件监听在80端口上,并且可以在本机上成功访问http://localhost/。以/images/开头请求的URI地址,服务器会从/data/images文件夹下面返回对应的文件。例如,请求URI为http://localhost/images/example.png,nginx服务器会返回/data/images/example.png这个文件,。如果服务器没有这个文件会返回404 错误。不是以/images/开头的请求,就会被映射到/data/html文件夹。例如, 请求URI为http://localhost/some/example.html,服务器会返回/data/html/some/example.html这个文件。
为了应用一个新的配置文件,如果nginx尚未启动,则启动nginx,或者向nginx的主进程发送重新加载信号,执行:
nginx -s reload
一些情况下,没有达到预期的效果,你可以尝试通过查看access.log和 error.log (通常在/usr/local/nginx/logs或者/var/log/nginx) 日志文件来找原因。
设置一个简单的代理服务器
使用最频繁的是设置一个代理服务器,即:接受请求,并把所有的请求转到被代理的服务器上,获取到响应之后再发送到客户端。
首先,通过在配置文件中添加server块指令的方式来定义一个代理服务器。
server { listen 3000; root /data/up1; location / { } }
这个简单的服务器会监听3000端口,并且将所有的请求映射到本地文件系统的/data/up1文件夹。创建该文件夹并放一个文件index.html。需要注意的是 server上下文就是这个根指令的位置。例如当选择用于提供请求的location块指令不包括根指令时,(内部会)使用这样的根指令(root /data/up1)。
接下来,修改为代理服务器配置。在第一个位置块中,使用参数中指定的代理服务器的协议、名称和端口(http://localhost:8080)放置在proxy_pass指令下。修改第二个location指令块,这个指令块会把当前的/images前缀请求映射到/data/images文件夹中。
server { location / { proxy_pass http://localhost:8080; } location /image/ { root /data; } }
为了匹配更多的图片类型请求,location块指令修改如下:
location ~ .(gif|jpg|png)$ { root /data/images; }
使用正则表达式~来匹配所有以 .gif, .jpg, 和.png结尾的URIs,响应的请求会被映射到/data/images文件夹中。
server { location / { proxy_pass http://localhost:8080; } location ~ .(gif|jpg|png)$ {
root /data/images;
} }
这个服务器将会过滤后缀为 .gif, .jpg, 或者 .png 的然后分发到/data/images文件夹(通过在root中添加URI参数) ,并且其它的请求会被代理到上面的server配置中http://localhost:8080/.