鼎鼎知识库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

03反向代理.md 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # 反向代理简介
  2. 反向代理(reverse proxy)其实就是相当于服务器,这个服务器成为了客户端和上游服务器(upstream server)的连接者。也可以看作是客户端请求的终结者,重新新一个连接到上游服务器的新连接。
  3. 一个经典的配置
  4. ```
  5. location /uri {
  6. prxoy_pass http://localhost:8000/newuri;
  7. }
  8. ```
  9. 当客户端请求uri的时候,proxy_pass代表着上游服务器接收的形式。
  10. 一个客户端请求想顺利地来到上游服务器,需要满足两个条件:
  11. 1. 路由地址匹配
  12. 2. 没有重写模块
  13. 以下包括了重写模块
  14. ```
  15. location / {
  16. rewrite /(.*)$ /index.php?page=$1 break;
  17. proxy_pass http://localhost:8000/index;
  18. }
  19. ```
  20. 以上,proxy_pass中的配置就不会生效。
  21. # 代理模块
  22. | 指令 | 说明 |
  23. | ----------------------------- | ------------------------------------------------------------ |
  24. | proxy_connect_timeout | 从接收请求到连接至上游服务器的等待时间 |
  25. | proxy_cookie_domain | 替代上游服务器来的`Set-Cookie`头中的`domain`属性,`domain`属性值通常会被替换成一个字符串、正则表示、变量 |
  26. | proxy_cookie_path | 替代上游服务器来的`Set-Cookie`中的`path`属性 |
  27. | proxy_header_hash_bucket_size | 请求头的最大值 |
  28. | proxy_hide_headeer | |
  29. | proxy_http_version | 使用的`HTTP`协议版本, `keepalive`连接就使用1.1 |
  30. | proxy_ignore_client_abort | 当设置为`on`, `Nginx`不会放弃同上游服务器的连接 |
  31. | proxy_ignore_headers | |
  32. | proxy_intercept_errors | 启用显示配置的eror_page错误,而不显示来自上游服务器的直接响应 |
  33. | proxy_max_temp_file_size | 当响应与内存缓冲区不匹配时,该指令给出溢出文件的最大值 |
  34. | proxy_pass | |
  35. | proxy_pass_header | 覆盖`proxy_hide_header`中的设置,允许这些头传递到客户端 |
  36. | proxy_pass_request_body | 如果设置为`off`,那么指令将会组织请求体发送到上游服务器 |
  37. | proxy_pass_request_headers | 如果设置为`off`,那么指令将会组织请求头发送到上游服务器 |
  38. | proxy_read_timeout | 连接关闭前从上游服务器两次成功读操作耗时。如果上游服务器处理慢,这里设置高些。 |
  39. | proxy_redirect | 重写来之上游服务器的`Location`和`Refresh`头,对于某些应用程序框架有用 |
  40. | proxy_send_timeout | 在请求关闭之前,向上游服务器两次写成功操作完成所需要的时间 |
  41. | proxy_set_body | 发送到上游服务器的请求体在这里被改写 |
  42. | proxy_set_header | |
  43. | proxy_temp_file_write_size | 限制同一时间内缓冲到一个临时文件的数据量 |
  44. | proxy_temp_path | 设定目录的层次 |
  45. # 带有cookie的遗留应用程序
  46. 在一个共同的端点服务器后放置多个遗留应用程序。
  47. # upstream模块
  48. | 指令 | 说明 |
  49. | ---------- | ------------------------------------------------------------ |
  50. | ip_hash | 根据ip地址的哈希值确保客户端均匀地连接所有服务器。键值基于c类地址 |
  51. | keepalive | 指定每一个worker进程缓存到上游服务器的连接数。使用HTTP连接时,proxy_http_version设置为1.1,并且将proxy_set_header设置为Connection "" |
  52. | least_conn | 激活负载均衡算法,将请求发送到活跃连接数最少的那台服务器 |
  53. | server | 为upstream定义一个服务器地址,带有TCP端口号的域名,IP地址,或者UNIX域套接字。参数包括:weight, max_fails, fail_timeout, backup,down |
  54. # 保持活动连接
  55. `Nginx`会为每一个worker进程保持同上游服务器的连接。如果`Nginx`与上游服务器通过HTTP/1.1进行对话,那么`NginX`会使用HTTP/1.1协议的持久连接机制维护这些打开的连接。
  56. ```
  57. upstream apche {
  58. server 127.0.0.1:8080;
  59. keepalive 32;
  60. }
  61. location / {
  62. proxy_http_version 1.1;
  63. proxy_set_header Connection "";
  64. proxy_pass http://apche;
  65. }
  66. ```
  67. # 负载均衡
  68. 三种负载均衡算法。
  69. # 使用错误文件处理上游服务器问题
  70. 当上游服务器无法响应请求,提供对外展示的错误文件。