proxy_pass

proxy_pass后的url加不加/的区别
# 在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;# 如果没有/,则会把匹配的路径部分也给代理走。下面四种情况分别用http://192.168.1.4/proxy/test.html 进行访问。
第一种:
location  /proxy/ {
          proxy_pass http://127.0.0.1:81/;
}
会被代理到http://127.0.0.1:81/test.html 这个url


第二:(相对于第一种,最后少一个 /)
location  /proxy/ {
          proxy_pass http://127.0.0.1:81;
}
会被代理到http://127.0.0.1:81/proxy/test.html 这个url


第三种:
location  /proxy/ {
          proxy_pass http://127.0.0.1:81/ftlynx/;
}
会被代理到http://127.0.0.1:81/ftlynx/test.html 这个url。


第四种情况(相对于第三种,最后少一个 / ):
location  /proxy/ {
          proxy_pass http://127.0.0.1:81/ftlynx;
}
会被代理到http://127.0.0.1:81/ftlynxtest.html 这个url


 从结果可以看出,应该说分为两种情况才正确。即http://127.0.0.1:81 (上面的第二种) 这种和 http://127.0.0.1:81/.... (上面的第1,3,4种) 这种。
proxy_pass实现伪源功能
server {
        listen          80;
        server_name     www.dyf.com;

        location /image {
            root            /data/www/;                     #首先读取本地路径资源;
            error_page      404 = /fetch$uri;               #当返回404,实现内部跳转;
        }

        location /fetch {            
            alias           /data/www/;                     #获取后本地保存的路径
            proxy_pass      http://www.source.com:80/;      #pass指向的server,注意不加‘/’会将匹配路径也追加;
            proxy_store     on;
            proxy_store_access user:rw group:rw all:rw;     #本地路径需要开启权限
        }
    }
    # proxy_pass 给出 
    # proxy_pass 只要执行就会走后端服务器,无论本地有无资源,所以先要进行本地判断;
    # 当404时走proxy_pass# 保存文件的修改时间根据接收到的“Last-Modified”响应头来设置。响应都是先写到临时文件,然后进行重命名来生成的。
    从0.8.9版本开始,临时文件和持久化存储可以放在不同的文件系统,但是需要注意这时文件执行的是在两个文件系统间拷贝操作,而不是廉价的重命名操作。
    因此建议保存文件的路径和proxy_temp_path指令设置的临时文件的路径在同一个文件系统中。
    # 由于先写进proxy_temp_file,针对不完整文件可删除,实现不完整数据不保存;
    # 两个文件系统之间的copy,最好设置proxy_temp_path & save_path 为统一路径;
    # 统一文件系统 -- rename
    # 不同文件系统 -- copy

proxy_connect_variables

  • proxy_connect_timeout 60s;ngx 与 proxy_server 连接超时时间,不能超过75s;

  • proxy_read_timeout 60s;与proxy_server读超时时间,决定ngx 等待多长时间去获得 proxy_server 请求响应不是获取整个response,而是两次reading操作的时间.

  • proxy_send_timeout 60s;ngx 给 proxy_server 发送请求的超时时间;不是整个发送时间,而是两次write时间;超时后仍然没有收到数据,连接关闭。

  • ngx & proxy 建立连接 -- connect_timeout

  • ngx --> proxy 发送请求 -- send_timeout

  • ngx <-- proxy 等待响应 -- read_timeout