Nginx 反向代理服务器

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

原文地址:https://www.cnblogs.com/zoho/p/3131370.html