使用nginx做反向代理

概述

简介

nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev. For a long time, it has been running on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and Rambler. According to Netcraft, nginx served or proxied 25.14% busiest sites in March 2016.

译文

nginx[engine x]是HTTP服务器,反向代理服务器,邮件代理服务器,同时也是通用TCP/UDP代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发。在很长一段时间里,它被运用在许多俄罗斯的高负载量的网站上。根据来自Netcraft的消息,到2016年3月,nginx服务或者代理了全球25.14%访问最高的网站。

什么是反向代理

方向代理的示意图如下。

代理就相当于一个中介,HTTP请求都先过代理,然后再到服务器的。以前都代理一般都放在浏览器的内网这一端,后来出现了放在服务器集群端的代理,为了区分,浏览器内网端成为正向代理(Forward Proxy),服务器集群端的代理就称为反向代理(Reverse Proxy)。

反向代理的优点

  1. 负载均衡
  2. 屏蔽真正服务器以保障安全性
  3. 静态资源和缓存
  4. 压缩请求能降低带宽压力
  5. 集中处理日志和审计
  6. URL重写

nginx的部分优点

  1. 安装和配置非常容易。
  2. 处理静态文件是最快最好的服务器。
  3. 并发处理能力是Apache的4倍以上。
  4. 支持负载均衡。
  5. nginx官方文档充足。

nginx的下载和安装

在最新的Ubuntu系统上直接可以用apt-get下载和安装最新的nginx。

1
> apt-get install nginx

配置nginx

官方网站中有全面的配置文档说明,本文仅对简单代理时配置进行说明。在/etc/nginx/nginx.conf配置文件中,官方默认为我们配置好了自动读取/etc/nginx/conf.d/*.conf。所以我们只需要在/etc/nginx/conf.d/中创建.conf文件即可。

1
> vim /etc/nginx/conf.d/test.conf

下面是一个简单的配置Demo。

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name ouyang.io;
location / {
proxy_pass http://localhost:4000;
}
access_log /var/log/nginx/blog.access.log;
error_log /var/log/nginx/blog.error.log;
}

很容易就可以看出,我们配置了一个server,监听了80端口,server名为ouyang.io,把所有根路径的请求都做了代理,交给了http://localhost:4000 ,access日志和error日志的路径也分别配置了。以上就是一个最基本的配置。
也可以参考官方比较全面的配置示例。

管理nginx

启动nginx。

1
> service nginx start

快速停止nginx。

1
2
# service nginx stop
> nginx -s stop

正常关闭nginx。

1
> nginx -s quit

当修改了配置文件,需要重新加载时。

1
> nginx -s reload

参考

  1. Nginx
  2. Nginx Admin Guide and Tutorial
  3. Full Example Configuration
  4. Ten Great Advantages of Nginx
  5. The Benefits of a Reverse Proxy