Nginx反向代理

最近我用国内阿里云的服务器搭建了几个站点,但是由于没有备案所以只能采用域名+端口的方式访问,这样访问起来很别扭,于是就想到了使用Nginx反向代理。

环境简介

00.png
做了一个简陋的拓扑图说明一下,图中的两台服务器都是处于公网的vps,都具有公网的ip地址,其中WEB服务器就是我在阿里云的未备案的vps,另一台是一台位于境外的vps,这里用来做Nginx反向代理。

在代理服务器安装nginx

安装所需环境,详细的安装步骤可以参考这里

yum install gcc zlib zlib-devel openssl openssl-devel -y

下载nginx安装包:

wget -c https://nginx.org/download/nginx-1.10.1.tar.gz

解压:

tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1

使用默认配置:

./configure

编译安装:

make
make install

查找安装路径:

whereis nginx

01.png

根据回显的信息进入安装路径,在nginx目录下有以下文件,我们主要用到的是sbin(执行程序)和conf(配置文件)两个文件夹:
02.png
nginx常用命令:

./nginx #启动nginx
./nginx -s stop #此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程
./nginx -s quit #此方式停止步骤是待nginx进程处理任务完毕进行停止
./nginx -s reload #重载配置文件
./nginx -v #查看版本信息

执行在sbin目录下执行./nginx启动Nginx,访问此vps的ip地址出现如下页面说明安装成功:
03.png
设置开机启动:

vi /etc/rc.local

增加一行:/usr/local/nginx/sbin/nginx
设置执行权限:

chmod 755 rc.local

配置代理服务器

这里有两种配置方法,一种是反向代理单个域名,通过这一个域名访问WEB服务器的单一服务;另一种则是代理多个域名,访问相应的域名时将请求代理到响应ip的响应端口。

代理单个域名

编辑默认配置文件:

vim /usr/local/nginx/conf/nginx.conf

将以下内容添加到如下图所示的部分:

proxy_pass http://172.18.78.14:6080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";

04.png

重载配置:

./nginx -s reload

最后将域名解析到代理服务器的ip地址即可。

代理多个域名

因为代理多个域名配置较多,我们新建一个配置文件方便查看:

vim /usr/local/nginx/conf/reverse-proxy.conf

粘贴如下内容:

server {
    listen 80;
    server_name a.test.com;
    location /{
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8081;
        #proxy_pass http://tomcat;
    }
    access_log logs/tomcat1_access.log;
}
server {
    listen 80;
    server_name b.test.com;
    location /{
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8082;
        #proxy_pass http://tomcat;
    }
    access_log logs/tomcat2_access.log;
}

需要注意的是,我在一开始的配置时同时代理了主域名即子域名,即test.com和a.test.com,这样配置的结果就是主域名无法进行代理,这种情况下如果还想使用主域名,可以使用www域名,即同时代理www.test.com和a.test.com等。

修改nginx.conf,导入刚才写的配置,在http{}中加入如下内容:

include reverse-proxy.conf;

05.png

最后重载配置即可:

./nginx -s reload