我正在尝试覆盖使用fastcgi_pass时传递给基于php的应用程序(特别是Phabricator)的http主机头.
我在使用proxy_pass时发现了很多这样做的例子,但我似乎无法找到如何使用fastcgi_pass执行此操作的示例.具体来说,我希望代理的php应用程序将主机头看作"phabricator.localhost".
(这样做的原因是我想将几个不同的域与Phabricator webapp相关联,但它只允许一个域关联,并且它拒绝任何未创建该域的请求.)
我很擅长用FastCGI配置Nginx,所以我不确定fastcgi的工作原理.任何帮助表示赞赏.
这是我的Nginx服务器配置:
server {
server_name phabricator.localhost www.example.com example.com;
root /opt/phabricator/phabricator/webroot;
location / {
index index.php;
rewrite ^/(.*)$ /index.php?__path__=/$1 last;
}
location = /favicon.ico {
try_files $uri =204;
}
location /index.php {
fastcgi_pass localhost:9000;
fastcgi_index index.php;
#### HERE ARE MY ATTEMPTS #####
#proxy_set_header HOST phabricator.localhost;
#fastcgi_param SERVER_NAME phabricator.localhost;
#fastcgi_pass_header 'Host: phabricator.localhost';
#fastcgi_pass_header 'Host: phabricator.localhost';
#add_header Host phabricator.localhost;
#proxy_set_header Host phabricator.localhost;
#### END ATTEMPTS ####
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD …Run Code Online (Sandbox Code Playgroud) HTTP 1.1声明:"客户端必须在所有HTTP/1.1请求消息中包含主机头字段"
但是,我正在处理的机器会发出这个确切的POST(包含坐标),我无权更改:
POST /touch HTTP/1.1
Content-type: application/x-www-form-urlencoded
Content-Length: <n>
x=<int x>&y=<int y>
Run Code Online (Sandbox Code Playgroud)
400 Bad Request由于缺少Host头字段,Tomcat 7立即响应,POST永远不会到达我的servlet.有什么方法可以避免这个错误响应并使用servlet处理POST以支持这些旧机器吗?
我想设置一个管理页面(ASP.NET/C#),可以将IIS主机标题添加到托管页面所在的网站.这可能吗?
我不想添加一个http标头 - 我想模仿手动进入IIS的动作,调出网站的属性,点击网站选项卡上的高级,以及高级网站识别屏幕和新的"身份"主机头值,ip地址和tcp端口.
hostheader ×3
asp.net ×1
bad-request ×1
c# ×1
fastcgi ×1
http-1.1 ×1
iis ×1
nginx ×1
phabricator ×1
php ×1
tomcat ×1