Nginx 是一个流行的网页服务器和反向代理服务器软件,它充分利用异步逻辑,实现了低内存占用和高并发连接。很多网站都将 Nginx 部署到 Apache 服务器之前作为反向代理,甚至直接用 Nginx 替换 Apache 作为网页服务器。
安装 Nginx 非常简单:各大 Linux 系统中都包含了 Nginx,而 Windows 系统可以下载 Nginx 网站提供的二进制压缩包。
现在我们来看看 Nginx 的基本设置。Nginx 的配置文件为 nginx.conf。首先看如何将 Nginx 配置为静态网页服务器。最简单的例子如下:
http { server { listen 80; server_name www.example.com; location / { root /home/wwwroot; index index.html index.htm; } } }
上面的例子非常简单明了:启动一个 Nginx 的 HTTP 服务器,监听 80 端口,当请求的域名为 www.example.com 时,我们输出 /home/wwwroot 目录的内容。
上面的 location 指令实际上有下面这几种规则,按照优先级别排列:
location = uri {...} | 仅匹配该 uri |
location ^~ uri {...} | 匹配以该 uri 开始的地址 |
location ~ uri {...} | 正则匹配该 uri,区分大小写 |
location ~* uri {...} | 正则匹配该 uri,不区分大小写 |
location uri {...} | 匹配以该 uri 开始的地址 |
下面是个比较复杂的例子:
http { server { listen 80; server_name www.example.com; location / { root /home/wwwroot; index index.html index.htm; } location = /login { proxy_pass http://127.0.0.1:2020; } location ^~ /blog { proxy_pass http://127.0.0.1:4040; } location ~ \.php$ { proxy_pass http://127.0.0.1:8080; } location ~* \.(gif|jpg|png)$ { root /var/www/; } } }
可以看到,通过 proxy_pass 指令,我们可以将 Nginx 作为 PHP,Node.JS 等动态语言网站的反向代理服务器。对于 proxy_pass,需要注意比较这两种写法的不同:
location ^~ /blog { proxy_pass http://127.0.0.1:4040; } location ^~ /blog { proxy_pass http://127.0.0.1:4040/; }
区别在于,当用户访问 /blog/abc.html 时,对于第一种设置 Nginx 将会抓取 http://127.0.0.1:4040/blog/abc.html 文件,而对第二种设置 Nginx 将抓取 http://127.0.0.1:4040/abc.html 文件。实际上,第一种设置也等同于如下的写法:
location ^~ /blog { proxy_pass http://127.0.0.1:4040/blog; }
参考资料:
[1] Module ngx_http_core_module - location
[2] Nginx Location配置总结及基础最佳实践
[3] Nginx Configuration Primer
[4] Configuring NGINX to serve multiple webapps