nginx反向代理(端口转发)
nginx配合nodejs做代理,进行端口转发。
安装 nginx
1 | sudo apt-get install nginx |
nginx 文件结构
- 所有的配置文件都在 /etc/nginx 下,并且每个虚拟主机已经安排在了 /etc/nginx/sites-available 下
- 程序文件在 /usr/sbin/nginx
- 日志放在了 /var/log/nginx 中
- 并已经在 /etc/init.d/ 下创建了启动脚本 nginx
- 默认的虚拟主机的目录设置在了 /var/www/nginx-default (有的版本 默认的虚拟主机的目录设置在了 /var/www, 请参考 / etc/nginx/sites-available 里的配置)
启动 nginx
1 | sudo /etc/init.d/nginx start |
配置 Nginx
代理
/etc/nginx/sites-available
记录代理配置/etc/nginx/sites-enabled
启动已配置好的代理- 先在
/etc/nginx/sites-available
配置代理 - 在
/etc/nginx/sites-enabled
下创建symbol link链接available下的配置文件以启用代理配置
主要配置
1 | server { |
转发规则
我用的是nodejs
+express
,内部已经定义了静态资源服务,所以可以直接将所有的请求直接转发给node服务,以作出相应。若非上游服务做静态资源服务,可以在location
模块定义资源目录。
- location后的地址(rul匹配)十分灵活,接受正则。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15location = / {
# 完全匹配 =
# 大小写敏感 ~
# 忽略大小写 ~*
}
location ^~ /images/ {
# 前半部分匹配 ^~
# 可以使用正则,如:
# location ~* \.(gif|jpg|png)$ { }
}
location / {
# 如果以上都未匹配,会进入这里
} - root 定义该匹配后的处理路径根目录
- index 定义首页(按顺序,以此尝试访问)
1
2
3
4location / {
root /home/wwwroot/bitzo/;
index index.html index.htm
} - 反向代理:proxy_pass
- 还有其他相关的代理配置,等了解了再慢慢加在这。。。
一个坑
在配置的时候我没注意,location里一直加着 try_files $uri $uri/ =404
, 导致除了主页面,访问其他一切资源全部都404。之后将这条语句注释掉即可成功。目前还不太清楚为什么。惨惨惨。