Nginx快速使用(二)

反向代理

Nginx反向代理就像是一家餐厅的服务员。当客人(用户)进来点菜(访问网站)时,他们其实并不知道厨房里有哪些厨师在工作(服务器在运行)。服务员(Nginx反向代理)会收到客人的订单,然后转身去厨房找到合适的厨师来做这道菜(将请求转发到对应的服务器)。厨师做好菜后,服务员再将菜端给客人(将服务器的响应结果返回给用户)。这样客人就可以愉快地享用美食,而不需要关心是哪个厨师做的,或者厨房里到底有多少厨师。

在这个过程中,客人只与服务员打交道,服务员起到了中间人的作用,帮助客人和厨师之间沟通。同样,在网络中,用户只与Nginx反向代理打交道,由它来决定如何根据请求的内容和配置规则将请求转发到内部的不同服务器,并将服务器的响应结果返回给用户

http反向代理

# 运行用户
user nginx;

# 启动进程, 通常设置成和CPU的数量相等
worker_processes auto;

# 全局错误日志
error_log  /var/log/nginx/error.log;
error_log  /var/log/nginx/notice.log notice;
error_log  /var/log/nginx/info.log info;

# PID文件,记录当前启动的nginx的进程ID
pid        /var/run/nginx.pid;

# 工作模式及连接数上限
events {
    worker_connections 1024; # 单个后台worker process进程的最大并发链接数
}

# 设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    # 设定mime类型, 类型由mime.types文件定义
    include       /etc/nginx/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    /var/log/nginx/access.log main;

    # sendfile指令指定nginx是否调用sendfile函数(zero copy方式)来输出文件
    sendfile        on;

    # 连接超时时间
    keepalive_timeout  120;
    tcp_nodelay        on;

    # gzip压缩开关
    # gzip  on;

    # 设定实际的服务器列表
    upstream backend_server {
        server 127.0.0.1:8080; # 后端服务器地址和端口
    }

    # HTTP服务器
    server {
        # 监听80端口
        listen       80;

        # 定义使用www.example.com访问
        server_name  www.example.com;

        # 首页
        index index.html;

        # 指向webapp的目录
        root /path/to/your/webapp;

        # 编码格式
        charset utf-8;

        # 代理配置参数
        proxy_connect_timeout 180;
        proxy_send_timeout 180;
        proxy_read_timeout 180;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 反向代理的路径(和upstream绑定),location后面设置映射的路径
        location / {
            proxy_pass http://backend_server;
        }

        # 静态文件,nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            root /path/to/your/static/files;
            expires 30d;
        }

        # 设定查看Nginx状态的地址
        location /NginxStatus {
            stub_status on;
            access_log  off;
            allow 127.0.0.1;
            deny all;
        }

        # 禁止访问.ht文件
        location ~ /\.ht {
            deny all;
        }

        # 错误处理页面(可选择性配置)
        # error_page 404 /404.html;
        # error_page 500 502 503 504 /50x.html;
        # location = /50x.html {
        #     root /path/to/your/error/pages;
        # }
    }
}