悪い HTTP クライアントはハッシュ記号をエスケープせず、次のように nginx に送信しています。
GET /foo/escaped#stuff
それ以外の:
GET /foo/escaped%23stuff
#
nginxはproxy_pass
ディレクティブの の後のテキストを削除するため、これにより nginx の構成が壊れます。ハッシュ記号をエスケープするにはどうすればよいですか?
- 使用
return 200 "$request_uri";
すると、nginxがそれを読んでいることがわかりますので、可能のようです。ただし、Nginx はlocation
ブロック単位で無視するため、実際には何とも一致しません。 以下のコードを使用して、Python でエスケープされていない HTTP GET 要求を送信できます。
import socket def get(host, port, uri): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.send('GET {} HTTP/1.0\r\nHost: {}\r\n\r\n'.format(uri, host)) return sock.recv(1000)