nginx-1

147 阅读2分钟

首先我们看一个最简单的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拦截了,返回一个自己搞的东西给你,或者把你的一些信息记录了。

所以尽量不要找免费的代理服务器,有安全风险。