首先我们看一个最简单的nginx的配置文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;#域名
location / {
root html;
index index.html index.htm;#默认主页
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
我们可以看到一个server表示一个站点的配置,以及root这个站点的入口路径,因此如果我们想代理两个站点完全可以这样修改。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /html/www.baidu.com;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 81;
server_name localhost;
location / {
root /html/www.jd.com;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx的一个功能是反向代理,这个大家都知道。
先谈什么是代理吧,代理就是中间人。
比如男生和女生相亲,媒婆就是代理。
反向代理和正向代理在我看来是观察的角度不同,
比如男生想找女生,但是他不能直接访问女生,于是他找了个媒婆,媒婆帮他返回女生信息,那么这个媒婆对于男生来说就是正向代理。
比如女生让男生找自己,他叫媒婆当入口,其他人可以通过媒婆找到自己,那么这个媒婆对于女生就是反向代理。
配置反向代理,root就没用了,配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://www.baidu.com;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
当然现在nginx反向代理的都是一个集群,我们可以定义一组服务器,起个组名,然后代理到这个组名上,也就是负载均衡反向代理,默认是轮询,配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream group1 {
server 192.168.0.2:80;
server 192.168.0.3:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://group1;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
你要是配个简单的权重,如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream group1 {
server 192.168.0.2:80 weight=1;#访问比例1
server 192.168.0.3:80 weight=10;#访问比例10
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://group1;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
简单聊聊安全问题:
你是用户A---你可能会找个免费的代理服务器B --- nginx --- 内部服务器
nginx和代理服务器B之间是https,A和代理服务B是http。
假设B是个好人,你拿着http请求访问,B和nginx反问,发现你是http,让你重定向到https。
假设B已经被攻陷了,你拿着http请求访问,B直接把nginx让你重定义到https拦截了,返回一个自己搞的东西给你,或者把你的一些信息记录了。
所以尽量不要找免费的代理服务器,有安全风险。