reverse-proxy.conf 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # Nginx UI Template Start
  2. name = "Reverse Proxy"
  3. author = "@0xJacky"
  4. description = { en = "Reverse Proxy Config", zh_CN = "反向代理配置"}
  5. [variables.enableWebSocket]
  6. type = "boolean"
  7. name = { en = "Enable WebSocket", zh_CN = "启用 WebSocket"}
  8. value = true
  9. [variables.clientMaxBodySize]
  10. type = "string"
  11. name = { en = "Client Max Body Size", zh_CN = "客户端最大请求内容大小"}
  12. value = "1000m"
  13. [variables.scheme]
  14. type = "select"
  15. name = { en = "Scheme", zh_CN = "协议"}
  16. value = "http"
  17. mask = { http = { en = "HTTP" }, https = { en = "HTTPS" } }
  18. [variables.host]
  19. type = "string"
  20. name = { en = "Host", zh_CN = "主机"}
  21. value = "127.0.0.1"
  22. [variables.port]
  23. type = "string"
  24. name = { en = "Port", zh_CN = "端口"}
  25. value = 9000
  26. # Nginx UI Template End
  27. # Nginx UI Custom Start
  28. {{- if .enableWebSocket }}
  29. map $http_upgrade $connection_upgrade {
  30. default upgrade;
  31. '' close;
  32. }
  33. map $remote_addr $proxy_forwarded_elem {
  34. # IPv4 addresses can be sent as-is
  35. ~^[0-9.]+$ "for=$remote_addr";
  36. # IPv6 addresses need to be bracketed and quoted
  37. ~^[0-9A-Fa-f:.]+$ "for=\"[$remote_addr]\"";
  38. # Unix domain socket names cannot be represented in RFC 7239 syntax
  39. default "for=unknown";
  40. }
  41. map $http_forwarded $proxy_add_forwarded {
  42. # If the incoming Forwarded header is syntactically valid, append to it
  43. "~^(,[ \\t]*)*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*([ \\t]*,([ \\t]*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*)?)*$" "$http_forwarded, $proxy_forwarded_elem";
  44. # Otherwise, replace it
  45. default "$proxy_forwarded_elem";
  46. }
  47. {{- end }}
  48. # Nginx UI Custom End
  49. if ($host != $server_name) {
  50. return 404;
  51. }
  52. location / {
  53. {{ if .enableWebSocket }}
  54. proxy_http_version 1.1;
  55. proxy_set_header Upgrade $http_upgrade;
  56. proxy_set_header Connection $connection_upgrade;
  57. {{ end }}
  58. client_max_body_size {{ .clientMaxBodySize }};
  59. proxy_redirect off;
  60. proxy_set_header Host $host;
  61. proxy_set_header X-Real-IP $remote_addr;
  62. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  63. proxy_set_header X-Forwarded-Proto $scheme;
  64. proxy_set_header Forwarded $proxy_add_forwarded;
  65. proxy_pass {{ .scheme }}://{{ .host }}:{{ .port }}/;
  66. }