NGINX将HEAD转换为GET请求

由于一些糟糕的devise决定,我们有一个应用程序无法响应HTTP HEAD请求(返回'方法不允许')。 修改软件正确返回HEAD请求将是棘手的,不是不可能的,但额外的工作。 该应用程序位于NGINX代理的后面,我想知道是否有办法让NGINX将从客户端收到的HEAD请求转换成GET请求到后端,然后放弃除了标题之外的响应并将其发回给客户端就像我们的应用程序服务器能够响应HEAD请求一样。

当前configuration(相当标准)

upstream ourupstream{ server unix:/var/apps/sockets/ourapp.socket.thread1 server unix:/var/apps/sockets/ourapp.socket.thread2 server unix:/var/apps/sockets/ourapp.socket.thread3 [like 20 of these] } server { listen 1.2.3.4:80; server_name ourapp; access_log /var/apps/logs/ourapp.nginx.plog proxy; error_log /var/apps/logs/ourapp.nginx.elog info; gzip on; gzip_types text/plain text/html; proxy_intercept_errors on; proxy_connect_timeout 10; proxy_send_timeout 10; proxy_read_timeout 10; proxy_next_upstream error timeout; client_max_body_size 2m; error_page 404 /static/404.html; error_page 500 501 502 503 504 =500 /static/500.html; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://ourupstream/; } location /static/ { root /var/apps/global/; } } 

由于您使用的是proxy_pass,我认为您必须使用一些error_page滥用(因为您已经使用了error_pages,您还需要启用recursion错误页面)。 我认为这会对你有用:

 upstream ourupstream{ server unix:/var/apps/sockets/ourapp.socket.thread1 server unix:/var/apps/sockets/ourapp.socket.thread2 server unix:/var/apps/sockets/ourapp.socket.thread3 [like 20 of these] } server { listen 1.2.3.4:80; server_name ourapp; access_log /var/apps/logs/ourapp.nginx.plog proxy; error_log /var/apps/logs/ourapp.nginx.elog info; gzip on; gzip_types text/plain text/html; proxy_intercept_errors on; proxy_connect_timeout 10; proxy_send_timeout 10; proxy_read_timeout 10; proxy_next_upstream error timeout; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 2m; error_page 404 /static/404.html; error_page 500 501 502 503 504 =500 /static/500.html; location @force_get { recursive_error_pages on; proxy_method GET; proxy_pass http://ourupstream; } location / { error_page 550 = @force_get; if ($request_method = HEAD) { return 550; } proxy_pass http://ourupstream; } location /static/ { root /var/apps/global/; } }