nginx怎么设置虚拟机来记录所有非法host header
答案:2 悬赏:80 手机版
解决时间 2021-01-28 07:09
- 提问者网友:不爱我么
- 2021-01-27 13:19
nginx怎么设置虚拟机来记录所有非法host header
最佳答案
- 五星知识达人网友:青尢
- 2021-01-27 14:14
nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块。其中proxy_set_header指令就是该模块需要读取的配置文件。在这里,所有设置的值的含义和http请求同中的含义完全相同,除了Host外还有X-Forward-For。
Host的含义是表明请求的主机名,因为nginx作为反向代理使用,而如果后端真是的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败【默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的host字段应为proxy_pass指令设置的服务器】。
同理,X_Forward_For字段表示该条http请求是有谁发起的?如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。因此,在配置用作反向代理的nginx中一般会增加两条配置,修改http的请求头:
proxy_set_header Host $http_host;
proxy_set_header X-Forward-For $remote_addr;
这里的$http_host和$remote_addr都是nginx的导出变量,可以再配置文件中直接使用。如果Host请求头部没有出现在请求头中,则$http_host值为空,但是$host值为主域名。因此,一般而言,会用$host代替$http_host变量,从而避免http请求中丢失Host头部的情况下Host不被重写的失误。
Host的含义是表明请求的主机名,因为nginx作为反向代理使用,而如果后端真是的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败【默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的host字段应为proxy_pass指令设置的服务器】。
同理,X_Forward_For字段表示该条http请求是有谁发起的?如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。因此,在配置用作反向代理的nginx中一般会增加两条配置,修改http的请求头:
proxy_set_header Host $http_host;
proxy_set_header X-Forward-For $remote_addr;
这里的$http_host和$remote_addr都是nginx的导出变量,可以再配置文件中直接使用。如果Host请求头部没有出现在请求头中,则$http_host值为空,但是$host值为主域名。因此,一般而言,会用$host代替$http_host变量,从而避免http请求中丢失Host头部的情况下Host不被重写的失误。
全部回答
- 1楼网友:醉吻情书
- 2021-01-27 15:47
1。运行virutalbox(virtualbox.exe),不要运行虚拟机;2。打开寄主机的“网络连接”页面,记下“virtualbox host-only network”的网络设置(我的默认设置为(安装完virtualbox后,网络连接就自动多了个virtualbox host-only network):ip地址为192.168.56.1,掩码为255.255.255.0);3。启动虚拟机,将虚拟机的网络设置如下:ip地址:192.168.56.2掩码:255.255.255.0网关:192.168.56.1(我的试验发现,不需要设置dns);4。尝试宿主机与虚拟机互ping如果发现ping不通,主要的可能原因是防火墙拦截了互ping时,可以将2台计算机的防火墙先关闭,证明互ping成功后再打开防火墙5。我的目标是宿主机连接使用虚拟机的数据库服务,sqlserver的默认端口为:1433,因此,对虚拟机 windows xp防火墙设置例外端口,使得宿主机可连接虚拟机,对虚拟机 windows xp设置如下:开始-->控制面板-->windows防火墙-->点击“例外”选项卡-->点击“添加端口”按钮起一个容易记的名字,端口为:1433,单选按钮:tcp,点确定。宿主机测试是否能连接:在windows 7win+r-->cmd-->telnet 192.168.68.2 1433出现新的命令窗口,命令窗口的标题是“telnet 192.168.68.2”,就证明成功了。如果告诉你telnet不是内部命令,依次打开“开始”→“控制面板”→“打开或关闭windows功能”,在打开的窗口处,寻找并勾选“telnet客户端”,然后点击“确定”。顺利安装后,再在运行下输入此命令就ok了。 通过host-only使宿主机与虚拟机通信,此时虚拟机无法访问外网。要解决该问题,最简单的方法是:为虚拟机再设置一块网卡,连接方式为nat 另外,如果有路由器,则通过桥接方式(bridge)就可以实现既互相通信又能上网了,因为此时宿主机与虚拟机是局域网上两台平等的计算机。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯