一. 介绍
反向代理是Ngxin非常重要的一项功能,那么什么是反向代理呢?以及我们什么时候会用到反向代理?
- 反向代理:外部客户端通过网关访问网关所在内部网络中服务器上的内容,此时网关起到了反向代理的作用,
- 我们平常通过浏览器访问远程Web服务器基本都是通过反向代理访问内容的。
Nginx的反向代理功能可以通过在配置文件中设置proxy_pass指令帮助我们完成。
二. 准备工作
在配置nginx之前,我们先在本地启动一个应用程序,然后确保能正常访问到服务 http://127.0.0.1:8080/
三. nginx.conf 配置
为了简洁,我这里只列出核心配置,需要完整配置的可以参考我的上一篇文章Nginx核心配置讲解与实践
http {
# 设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
# 设定虚拟主机配置
server {
# 侦听80端口
listen 80;
# 定义使用什么虚拟主机地址访问,可以填写多个值,使用空格分开,支持通配符和正则
server_name localhost;
# 定义服务器的默认网站根目录位置,支持相对路径和绝对路径,此处html为相对路径,等同于${NGINX_HOME}/html
root html;
# 定义首页索引文件的名称
index index.php index.html index.htm;
# 设定本虚拟主机的访问日志
access_log logs/nginx.access.log main;
error_log logs/quancha.error.log;
# 默认请求
location / {
# 请求转发到目标服务地址
proxy_pass http://127.0.0.1:8080/;
# 以下是一些反向代理的配置参数,可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#允许客户端请求的最大单文件字节数
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数,
client_body_buffer_size 128k;
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 90;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 90;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_buffers 4 32k;
#高负荷下缓冲大小(proxy_buffers * 2)
proxy_busy_buffers_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
}
# 配置静态资源,${APP_HOME}为应用程序根目录
location /static {
alias ${APP_HOME}/static;
}
}
}
访问localhost
四. 自定义vhosts
在上面的步骤中,我们是直接将配置写入nginx.conf文件,但是在实际工作中,我们建议能自己建立vhost文件。
-
前面是通过IP地址访问,下面我们改为使用域名访问;域名需要事先指向我们Nginx服务器,我们可以通过在hosts文件中添加映射记录实现域名和IP地址的映射:
- hosts文件路径
- Windows:C:\Windows\System32\drivers\etc\hosts
- Linux:/etc/hosts
- 添加hosts记录
127.0.0.1 www.abc.com
- hosts文件路径
-
首先我们现在nginx.conf同目录下新建一个文件夹vhosts(当然您也可以不建立,后续的include引入路径差异而已)
-
在vhosts目录下创建一个www.abc.com.conf文件,文件名可自由定义,一般我会用域名作为文件名;文件内容如下:
# 设定虚拟主机配置
server {
# 侦听80端口
listen 80;
# 这里我改为使用域名访问,注意:域名需要指向当前Nginx服务器
server_name www.abc.com;
# 定义服务器的默认网站根目录位置,支持相对路径和绝对路径,此处html为相对路径,等同于${NGINX_HOME}/html
root html;
# 定义首页索引文件的名称
index index.php index.html index.htm;
# 设定本虚拟主机的访问日志
access_log logs/nginx.access.log main;
error_log logs/quancha.error.log;
# 默认请求
location / {
# 请求转发到目标服务地址
proxy_pass http://127.0.0.1:8080/;
# 这里省略其它反向代理配置项...
}
# 配置静态资源,${APP_HOME}为应用程序根目录
location /static {
alias ${APP_HOME}/static;
}
}
再来使用http://www.abc.com/访问下