我有一个公共 IP 地址、一个路由器和路由器后面的多台服务器。
我想通过路由器将不同的域(全部使用 HTTP)转发到不同的服务器。
例如:
example1.com => 192.168.0.110
example2.com => 192.168.0.120
foo.example2.com => 192.168.0.130
bar.example2.com => 192.168.0.140
Run Code Online (Sandbox Code Playgroud)
我知道这可以使用端口转发来完成,但我需要在端口 80 上运行的所有主机。
我找到了一些关于 IP Masquerading 的信息,但我发现这很难理解,我不确定它是否是我所追求的。
我发现的另一个解决方案是将所有流量定向到反向代理服务器,该服务器将请求转发到适当的服务器上。iptables 呢?
我使用的是 Billion 7404 VNPX 路由器。该路由器是否具有可以实现此目的的功能?
这些是我唯一的选择吗?我完全错过了什么吗?一个比其他的更推荐吗?
我四处搜索,但我认为我没有找到正确的关键字。
不久前我问了同样的问题,但我想我没有把我的问题说对。我正在尝试将整个虚拟主机域反向代理到另一个虚拟主机的子目录,例如http://host2.com -> http://host1.com/host2。
Apache 的默认站点文件是这个
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName "host1.com"
<Directory /srv/www/host1>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order deny,allow
Allow from all
</Directory>
DocumentRoot /srv/www/host1
WSGIScriptAlias / /srv/www/host1/apache/django.wsgi
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName "host2.com"
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://host1.com/host2
ProxyPassReverse / http://host1.com/host2
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
此时,问题是每当我去http://host2.com 时,它都会显示http://host1.com而不是http://host1.com/host2。我错过了什么?我不确定这是否重要,但是 host1 是使用带有 wsgi 的 Django 托管的。
目标是让 PHP 知道正确的面向 Web 的 server_port。
设置是:
nginx 在端口 443 上反向代理以在端口 80 上反向代理到端口 8008 上的 nginx 并运行 php-fpm 作为 fastcgi。
达到 80 或 443 都可以正常工作,除了 $_SERVER['SERVER_PORT'] 在 php 中默认总是显示 8008。我可以对 fastcgi_param server_port 进行硬编码,但它仅适用于 80 或 443,但不能同时适用于两者。
# default
fastcgi_param SERVER_PORT $server_port;
# harcode to 80
fastcgi_param SERVER_PORT 80;
Run Code Online (Sandbox Code Playgroud)
如何获得可用于 php 的正确的面向外部的服务器端口?
我在Nginx 0.8.54 上尝试尽可能 DRYly 实现以下目标:
localhost:8060cookie no_cacheistrue或 if request method is not GET。$document_root/static/$uri.$document_root/cache/$uri和$document_root/cache/$uri.html。/,请不要尝试静态文件,而只尝试$document_root/cache/index.html.localhost:8060既没有找到静态文件也没有找到缓存文件的情况。当前配置文件:
server {
root /srv/web/example.com;
server_name example.com;
location @backend { proxy_pass http://localhost:8060; }
location / {
if ($cookie_no_cache = true) { proxy_pass http://localhost:8060; }
if ($request_method != GET) { proxy_pass http://localhost:8060; }
try_files /static/$uri /cache/$uri /cache/$uri.html @backend;
}
location = / {
if …Run Code Online (Sandbox Code Playgroud) 我将如何配置 IIS 7.0 的 ARR 和 URL 重写以基于主机进行反向代理。
例如:
http://website1.mydomain.com gets routed internally to internalserver\website1
http://website2.mydomain.com gets routed internally to internalserver2\website2
http://website3.mydomain.com gets routed internally to internalserver2 (default website)
Run Code Online (Sandbox Code Playgroud)
仅供参考 - 公共 DNS 网站 1.mydomain.com 和其他网站实际上都指向 mydomain.com 的公共 IP。
请注意,这不是所有相同的服务器。防火墙内部有多个 Web 服务器和一个普通的默认 Web 服务器,其端口 80 和 443 对外公开。我有一个 IP 地址和一个域名。因此,由于我的防火墙中有多个 Web 服务器,因此我需要将主机名子域路由到内部的不同 Web 服务器。
任何详细的步骤都会有很大帮助。
标题基本概括了所有内容。基本上,我想根据请求的源 IP 将请求路由到特定的后端服务器。
IE,
HTTP Request from 192.168.100.1 -> HAProxy -> BackendServer A
HTTP Request from 192.168.100.2 -> HAProxy -> BackendServer B
Run Code Online (Sandbox Code Playgroud) 我们的主 Web 服务器正在使用 IIS 6,它显然会捕获所有端口 80 流量,并且我们在使用 Apache 托管的非标准端口 (8443) 上提供了另一个应用程序。
例如:
我希望能够在不使用端口 8443 的情况下访问 Apache 应用程序。也就是说,IIS 应该在不同端口上重写/代理来自 Apache 应用程序的内容。注意:我不想重定向用户。
这可能吗?我应该使用哪些工具?
我的静态资产配置为
location @upstream {
proxy_pass http://localhost:82;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
try_files $uri @upstream;
access_log off;
expires max;
add_header Cache-Control public;
}
Run Code Online (Sandbox Code Playgroud)
不遵守 expires max 。
我认为它尊重传入的服务器标头。
如何修改它以设置 expires 标头?
我无法弄清楚如何添加基本的 HTTP 身份验证以密码保护在生产 Web 服务器上运行的开发测试环境。主站点和测试环境都是虚拟主机,它们使用 AJP 代理为 Tomcat Web 应用程序的单独实例提供服务。我们需要防止公众访问测试环境而不更改Tomcat环境中的web.xml,必须使用Apache而不是Tomcat来实现保护。然而,虚拟主机中的 ProxyPass 和 ProxyPassReverse 指令似乎覆盖了 .htaccess 或我放在 <Directory> 控制块中的任何东西的使用,而似乎我不能在 <VirtualHost> 控制的主体中使用像 AuthType 这样的指令挡在旁边。一世' 我对 Apache(或 Tomcat)不是很有经验,不确定哪些指令可以应用于何处以及哪些指令可能会覆盖其他指令。因为需要在生产服务器上进行更改,我不能轻易地进行试验,以免造成任何停机时间。
httpd.conf 本身非常简单:
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
LoadFile /usr/lib/libxml2.so
Run Code Online (Sandbox Code Playgroud)
相关虚拟主机文件/etc/apache2/sites-available/dev443如下:
<IfModule mod_ssl.c>
<VirtualHost dev.mydomain.com:80443>
ServerName dev.mydomain.com:80443
ServerAdmin webmaster@localhost
DocumentRoot /var/www/dev
ProxyPass / ajp://127.0.0.1:8010/
ProxyPassReverse / ajp://127.0.0.1:8010/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/dev/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None …Run Code Online (Sandbox Code Playgroud) authentication reverse-proxy virtualhost http-basic-authentication apache-2.2
我正在尝试将 nginx 1.0.12 设置为 apache 2.2.15 的代理,但遇到了一个奇怪的问题。而且我连续第三天都无法解决它。我有测试站点 c-craft.info 并在 /roundcube 子目录中安装了 roundcube。所以这里的问题是:
如果您尝试打开http://c-craft.info/roundcube,您将奇怪地重定向回您自己的 IP 地址。所以看起来nginx试图从remote_addr下载静态文件。但是,如果您将尾部斜杠添加到 uri 中,例如roundcube/,它将起作用。
另一个例子:尝试打开http://www.contra.lv - 你也将重定向回你自己的 IP 地址,nginx 再次尝试从 remote_addr 下载静态文件。
有趣的是,通过 apache 连接效果很好:
c-craft.info:9091/roundcube
contra.lv:9091
我真的需要你的建议如何修复它,因为我被卡住了......这是我当前的配置文件:
配置文件
user nginx;
worker_processes 2;
pid /var/run/nginx.pid;
events {
worker_connections 2048;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
client_max_body_size 64m;
client_body_buffer_size 256k;
sendfile on; …Run Code Online (Sandbox Code Playgroud)