正向代理

由本地机器访问服务器时,利用代理ip地址披一个马甲,使用代理的ip进行一个访问

反向代理

还是准备三台linux机器,分别安装好nginx服务,nginx咫尺web服务器以及反向代理

lb01 nginx负载均衡
worker-66 提供静态页面的nginx
worker-67 提供静态页面的nginx

配置nginx的access.log查看代理ip走向

  1. 修改第一个nginx web服务器的配置,定义好日志记录功能,以及日志格式 ```nginx

    日志的格式

    log_format main ‘$remote_addr - $remote_user [$time_local] “$request” ‘
    1. '$status $body_bytes_sent "$http_referer" '
    2. ' "$http_user_agent" "$http_x_forwarded_for" ';

第一个域名虚拟主机

server { listen 80; server_name mp3.chaoge.com; charset utf-8; access_log logs/access.log.mp3 main; location / { root html/mp3; index index.html index.htm; } }

  1. 2. 修改第二个web服务器的配置
  2. ```nginx
  3. server {
  4. listen 80;
  5. server_name mp3.chaoge.com;
  6. charset utf-8;
  7. #配置日志,加不加都可,看自己需求
  8. access_log logs/access.log.mp3 main;
  9. location / {
  10. root html/mp3;
  11. index index.html index.htm;
  12. }
  13. }
  1. 实时检测日志的内容,查看用户请求信息

    tail -f 检测日志文件,日志名与自己配置时的内容进行对应

    tail -f /opt/nginx/logs/access.log.mp3

    分别给web服务器发出请求即可

通过负载均衡发出请求,查看反向代理过程

  1. http {
  2. include mime.types;
  3. default_type application/octet-stream;
  4. #定义节点服务器地址池
  5. upstream my_node {
  6. server 172.0.0.66;
  7. server 172.0.0.67;
  8. }
  9. #作用是反向代理的虚拟主机配置
  10. server {
  11. listen 80;
  12. server_name lb.chaoge.com;
  13. access_log logs/access.log.lb01 main;
  14. location / {
  15. proxy_pass http://my_node;
  16. proxy_set_header Host $host;
  17. }
  18. }
  19. }

检验效果:通过本地机器访问lb01,查看请求的反向代理与分发,并查看日志情况,能够一次得到两台web服务器的站点内容,但是显示抓取的不是真实的ip地址

x-Forwarded-For参数

在反向代理请求后端节点服务器中,在请求头中添加获取客户端ip的字段信息,然后在后端节点上可以再次通过程序接受x-forwarded-for参数传来用户真实的ip信息

  1. 修改 lb01 反向代理机器的配置,添加如下参数,在请求转发的时候,添加头部信息,添加用户客户端ip信息

    1. server {
    2. listen 80;
    3. server_name lb.chaoge.com;
    4. access_log logs/access.log.lb01;
    5. location / {
    6. proxy_pass http://my_node;
    7. proxy_set_header Host $host;
    8. #添加如下这行即可
    9. proxy_set_header X-Forwarded-For $remote_addr;
    10. }
    11. }
  2. 如果想在web服务器中,记录该客户端真实的ip信息,还得修改日志格式如下 ```nginx

    日志的格式

    log_format main ‘$remote_addr - $remote_user [$time_local] “$request” ‘

    1. '$status $body_bytes_sent "$http_referer" '
    2. ' "$http_user_agent" "$http_x_forwarded_for" ';

主要确保有 “$http_x_forwarded_for” 即可

```