1 Nginx

Nginx(发音为 "engine x")是一个高效的开源 HTTP 服务器和反向代理服务器。作为 HTTP 服务器,Nginx 的功能类似于 Apache,它可以将静态网站内容提供为 HTTP 服务,即创建网站。

反向代理的概念可能不太容易理解,让我们通过两个典型的场景来解释一下:

  • 在客户的场地内,我们可能需要启动多个端口的 Web 服务,但客户只允许我们打开两个端口。
  • 我的博客和公众号服务都需要在 80 端口上运行,但它们是两个完全不同的程序,不方便合并代码。

在这种情况下,我们可以使用 Nginx 作为中间的转发。例如,我们可以将所有以 /wx 为相对路径的请求都转发到运行在 8082 端口的公众号服务上,其余的请求则被视为博客请求,转发到运行在 8083 端口的博客服务进行处理。

2 使用 Docker 运行 Http 服务

作为 Http 服务使用时,推荐以下方法:

2.1 安装 docker 镜像

1
$ docker pull nginx

docker image 很小,仅需要 187 M

2.2 启动 nginx 服务

1
$ docker run --rm -it -p 80:80 --name mynginx -v /exports/hexo_data/public/:/usr/share/nginx/html nginx

其中 /exports/hexo_data/public/ 是静态网页路径。

3 宿主机直接配置

作为反向代理,可能涉及多个端口,反复调试,使用 docker 不太方便,建议安装在宿主机上。

3.1 安装 nginx 工具

1
$ apt-get install nginx

3.2 设置配置文件

由于不同版本的配置文件可能存在细微差异,这里我们主要介绍的是入口配置文件。该文件可能会包含其他配置文件(参见 include 部分)。在大多数情况下,默认的配置文件会开启 80 端口,并使用位于 /usr/share/nginx/html 或 /var/www/html 的静态网页来创建网站。

如需反向代理,请在 /etc/nginx/nginx.conf 的 http 块内加入 server 块如下,另外,请注意删除其它对 80 端口的设置。

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;

location /wx {
proxy_pass http://localhost:8082;
}

location / {
proxy_pass http://localhost:8083;
}
}
1
2
3
4
5
6
7
8
9
server { # xieyan
listen 443 ssl;
#location /wx {
# proxy_pass http://localhost:8082;
#}
#location / {
# proxy_pass http://localhost:8083;
#}
}

在宿主机上重启 nginx 服务

1
$ service nginx restart

3.3 问题与解决

  • https 443 服务在 /etc/nginx/nginx.conf 中设置,默认数据目录在:/usr/share/nginx/html/
  • http 80 服务在/etc/nginx/sites-available/default 中设置,默认目录在:/var/www/html/