这里使用的是 Centos 7 和 Nginx 1.16.1。
以下命令都使用 root 用户执行。
安装
使用 yum 安装 Nginx:
1 | $ yum install nginx |
如果不赶时间的话可以从源码安装 Nginx,可查看 Nginx 的这篇安装文档,或 源码安装 Nginx
安装完之后,配置文件路径就在 /etc/nginx/nginx.conf
。
打开这个文件我们可以看到已经有一些默认配置了:
1 | http { |
先启动 Nginx
1 | $ nginx |
可以发现 Nginx 启动了一个 master
进程和两个 worker
进程,因为 Nginx 使用的是 master-worker
进程模型。
Nginx 进程已经启动了,我们可以尝试发起请求:
1 | $ curl -I localhost:80 |
基本的块和指令
root 指令
root 用于指定站点或者某个 URI 的根目录,默认配置中的 root 指向了 /usr/share/nginx/html
目录,当我们访问 localhost:80 或者公网 IP 访问 80 端口时,Nginx 就会返回 /usr/share/nginx/html
目录下的 index.html
文件。默认使用的是该目录下 index.html 的文件,默认读取文件可以用 index 指令修改。
listen 指令
listen 指令用在 server 块中指定监听的端口,一般 http 监听 80 端口,https 监听 443 端口
server_name 指令
如果有域名 DNS 指向本服务器的话需要填写该域名:
1 | server { |
location 块
location 块可以指定某个 URI 链接使用的配置:
1 | server { |
这样访问 /en
路径时就会返回 /my/other/path/index.html
文件。
include 指令
通常我们不会将所有配置放在同一个配置文件,我们可以使用 include
指令,默认的配置文件中已经使用了 include
指令:
1 | include /etc/nginx/default.d/*.conf; |
我们可以在 /etc/nginx/default.d/
目录下新建文件,用于其他的配置:
1 | $ cd /etc/nginx/default.d/ |
输入以下的配置:
1 | server { |
这样就可以把很多的服务分开配置。
常用配置
反向代理
通常我们部署 Node.js 服务时会使用 Nginx 或者其他服务器软件做反向代理。当用户发起请求到服务器时,通过 Nginx 的转发,把 HTTP 请求转发到 Node.js 服务中进行处理和响应。
与反向代理相对的是正向代理(或者直接叫代理),用户请求到我们服务器的时候把 HTTP 请求转发到第三方或者外部的服务,等待外部的服务响应,我们再把响应体返回给用户。
一般配置反向代理会把内部变量也转发过去:
1 | server { |
上面的代码表示监听 80 端口,如果用户请求的是 mydomain.com
域名的链接(除了 /other/service/*
),则把 HTTP 请求转发到本地的 8080 端口,并且把 $remote_addr
、$proxy_add_x_forwarded_for
、$host
、$http_host
加到请求头中,如果有一个 Node.js 服务正在监听 8080 端口,则可以接收到这些请求。
如果用户请求的是 mydomain.com/other/service/*
链接,则把 $remote_addr
、$proxy_add_x_forwarded_for
、$host
、$http_host
加到请求头中,转发到本机的 8081 端口。
静态文件服务器
1 | server { |
当用户请求 assets.mydomain.com
首页时,则会返回 /my/assets/root
路径中的内容,当访问 assets.mydomain.com/other
时,会返回 /my/other/assets/root
路径中的内容。并且都不会自动返回 index.html 文件,因为都禁止了 autoindex
;