正向代理和反向代理的理解

这里主要说的是nginx

正向代理:代理服务器是站在客户端这边的,代表客户去访问服务器 ,隐藏客户端ip,黑客或者犯罪分子就喜欢这么搞,理解图如下:

反向代理:代理服务器是站在服务器端的,客户访问服务端时,其实都是访问的代理服务器,这样很好的隐藏了服务器端的ip,有效的防止被攻击,理解图如下:

简而言之:正向代理,隐藏客户端;

                  反向代理,隐藏服务端;

正向代理的例子:a 一般的FQ软件都是正向代理,想要访问国外的网站,必须借助代理服务器进行访问;

                             b 还有就是服务器端需要访问外网时,也需要使用正向代理,隐藏ip

反向代理的例子:太多了,基本上企业都会使用反向代理隐藏自己的ip,还有就是项目跨域时用的也比较多

 

正向代理的大致配置如下

server {
    # 配置DNS解析IP地址,比如 Google Public DNS,以及超时时间(5秒)
    resolver 8.8.8.8;    # 必需
    resolver_timeout 5s;

    # 监听端口
    listen 8080;

    access_log  /home/reistlin/logs/proxy.access.log;
    error_log   /home/reistlin/logs/proxy.error.log;

    location / {
        # 配置正向代理参数
        proxy_pass $scheme://$host$request_uri;
        # 解决如果URL中带"."后Nginx 503错误
        proxy_set_header Host $http_host;

        # 配置缓存大小
        proxy_buffers 256 4k;
        # 关闭磁盘缓存读写减少I/O
        proxy_max_temp_file_size 0;
         # 代理连接超时时间
        proxy_connect_timeout 30;

        # 配置代理服务器HTTP状态缓存时间
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 301 1h;
        proxy_cache_valid any 1m;
    }
}

  反向代理配置如下

user   root owner;
worker_processes  4;

#error_log  /usr/local/etc/nginx/logs/error.log;
#error_log  /usr/local/etc/nginx/logs/info.log info;

pid        /Users/martin/nginx.pid;

events {
    worker_connections  256;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #日志的格式
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #访问日志
    #access_log  /usr/local/etc/nginx/logs/access_log_pipe  main;

    #sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;

    #反向代理配置

    server {
        listen       443 ssl;          #监听443端口
        server_name  app.doodl6.com;   #服务域名
        ssl          on;               #是否开启SSL加密
        ssl_certificate         /Users/martin/Documents/ssl/doodl6.crt; # SSL加密证书
        ssl_certificate_key     /Users/martin/Documents/ssl/doodl6.key; # SSL加密秘钥

        charset UTF-8;   #编码指定

        location ~* ^.+\.(xls|woff2|log|jpg|jpeg|gif|png|ico|html|cfm|cfc|afp|asp|lasso|pl|py|txt|fla|swf|zip|js|css|less)$ {   #代理指定后缀的请求,这里配的是常见的前端资源
            proxy_pass https://127.0.0.1:80;  #转向提供内容的真实服务器地址,也可以配置本地目录(见HTTP代理配置)
            proxy_set_header Host $http_host;  #写入Header值,
            proxy_set_header referer "$http_referer";
        }  

        location = / {        #代理域名请求,也就只有域名的请求,如:https://app.doodl6.com
            proxy_pass https://127.0.0.1:8080;
            proxy_set_header Host $http_host;
        } 

        location ~ / {       #代理所有请求,不符合上面两种配置的请求都会走这个代理配置
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $http_host;
        }
    }

    server {
        listen       80;
        server_name  app.doodl6.com;
        charset UTF-8; 

        location ~* ^.+\.(xls|woff2|log|jpg|jpeg|gif|png|ico|html|cfm|cfc|afp|asp|lasso|pl|py|txt|fla|swf|zip|js|css|less|ico)$ {
            expires 30s;   #内容缓存30秒
            root /Users/martin/project/app/front;  #指定文件根目录
        } 

        location ~ / {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $http_host;
        }
    }

  

 

posted @ 2019-08-12 16:15  生活是一种范  阅读(223)  评论(0编辑  收藏  举报