我有一个路由器后面的两个Web服务器:1行业务的Web应用程序/网站(Windows)和1个LAMP / Web开发服务器与多个网站/项目(与虚拟主机,自己的域名等Apache)。 到目前为止,要公开访问web dev项目,我已经在linux服务器上为每个虚拟主机使用了不同的端口,因为端口80将转发到Windows服务器(优先)。 现在,我更愿意使用我的域和子域来公开访问我的web开发项目(而不是难以记住端口号)。我如何设置它,以便我可以通过端口80访问两台服务器上的所有网站和端口443 …我添加SSL)?
在路由器和其他两台服务器之间设置一个反向代理服务器(侦听端口80和443),并通过代理服务器的主机名将stream量定向到另外两台(或更多台)服务器。 注意:通过这样做,您也将能够购买单个通配符或SAN能力证书来处理您的所有安全站点。
您没有提供足够的关于您的具体configuration的信息来解释如何做到这一点,但是这个站点和其他人都有关于设置和configuration反向代理的信息。 (即使是你提供了足够的信息,但是如此广泛的“我怎么……”的问题可能会在ServerFault中脱离主题)。
在任何情况下,无论使用哪种技术来设置后端服务器(Apache,nginx,IIS等)以及“redirect”(即redirect),您都可以将任何传入站点指向任何后端服务器。 ,反向代理)只能基于请求中的主机名(无论是域名,子域名,还是特定的目录或文件)。 实际上,您甚至可以将stream量发送到外部站点,但您是否确实需要确保您正确处理防火墙之外的stream量的安全性(即,确保https等)。 换句话说,这项技术可以完成你想要的任何事情,就像你想要的一样!
反向代理可以被实现为一个专门configuration的Apache,IIS,nginx或其他“networking服务器”,也有许多专门适用于这个(例如haproxy)的“服务器”技术。
鉴于你在这个过程中的位置,你应该采取这个指导和一般的技术了解更多。 换句话说,你不应该期望这个特定的问题会导致某人(1)select正确的实现,并且(2)告诉你如何设置并针对你的特定问题进行configuration。
一旦达到这一点,您将能够随时回到ServerFault, 针对您未能成功尝试应用特定解决scheme的特定问题提出具体问题 。
“解决”你的问题的步骤:
最好的办法,我认为是nginx和ngx_http_proxy_module 。 它高度可扩展,快速和function。 您可以使用一个证书为所有站点configurationencryption,它非常透明。 对于非常简单的例子,在nginx srv config中添加dirrective:
location /srv1 { proxy_pass http://server1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /srv2 { proxy_pass http://server2; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
现在,如果您尝试传递给http://nginx/srv1您将看到来自server1的响应。 此外,您可以拆分两个域的configuration,并且每个域都必须包含一个location / with porxy_pass,如上例所示。
您正在寻找的技术称为反向代理 。 您可以使用现有的前端服务器作为后端/ dev服务器的反向代理,这非常简单。 让您的前端终止SSL也很容易。
SF上已经有很多关于使用apache作为反向代理的问答
是的,这些人是正确的,反向代理是我想在这里使用的方法。 通过设置一个新的虚拟机并安装nginx作为反向代理服务器,我可以很好地工作。 现在,新的nginx服务器充当“前端服务器”,我的Ubuntu(14.04.4)/ apache(2.4.7)和Windows / IIS服务器(现在我所有的站点)现在充当“后端服务器”。 我只是改变了路由器端口80 / http的端口转发条目,以反映新的反向代理服务器的IP地址,并configuration了我的nginx和apacheconfiguration文件,如下所示。
我的nginx conf文件(/ etc / nginx / sites-enabled / default):
server { # catch all for all other domains and sub-domains that are pointing here, but don't have a site hosted here (or that I'm too lazy to track down) return 404; } server { # # stupidwindowsserveristillcantgetridof.com - line of business windows server # server_name stupidwindowsserveristillcantgetridof.com www.stupidwindowsserveristillcantgetridof.com; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://10.1.1.10:80; } } server { # # dev.domain1.com - web dev app/project #1 # server_name dev.domain1.com; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://10.1.1.20:80; } } server { # # beta.domain2.com - web dev app/project #2 # server_name beta.domain2.com; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://10.1.1.20:80; } } server { # # domain3.com - web dev app/project #3 # server_name domain3.com; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://10.1.1.20:80; } }
在我的apache conf文件中对应于web开发项目域名的虚拟主机示例:
# # Virtual host for dev.domain1.com - web dev app/project #1 # <VirtualHost *:80> ServerAdmin [email protected] ServerName dev.domain1.com #ServerAlias dev.domain1.com DocumentRoot /var/www/add_on_domain/dev.domain1.com <Directory /var/www/add_on_domain/dev.domain1.com> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/dev.domain1.com-error.log CustomLog ${APACHE_LOG_DIR}/dev.domain1.com-access.log combined </VirtualHost>
希望这可以更有效地帮助别人。
PS – 我计划在以后添加SSL / HTTPS