根据不同的端口或server_name反向映射到不同的服务器
1, 单服务的映射:比如有个服务是部署在192.168.0.100这台机器上,访问端口是8080,现在需要在Nginx所在机器的80端口映射到192.168.0.100的8080,在http{}里加配置如下:
server {
#nginx监听端口,即对外访问端口
listen 80;
location / {
#即原服务的地址及端口
proxy_pass http://192.168.0.100:8080;
}
}
2, 多服务映射(对外访问端口不一样):比如两个或多个服务,但对外访问端口不一样,则按1的配置方法,加多一个server,有几个服务就加几个这样的配置,以下配置表示
访问80端口跳转到192.168.0.100:8080,
访问8081端口跳转到192.168.0.101:8081
server {
listen 80;
location / {
proxy_pass http://192.168.0.100:8080;
}
}
server {
listen 8081;
location / {
proxy_pass http://192.168.0.101:8081;
}
}
3, 多服务映射(对外访问端口一样):比如两个或多个服务,但对外访问端口一样,都是80端口,这时需要指定server_name,以下配置表示所有服务都通过80端口访问,但根据server_name不同映射到不同的服务:
访问test1.xxx.com时跳转到192.168.0.100:8080
访问test2.xxx.com时跳转到192.168.0.100:8081
server {
listen 80;
server_name test1.xxx.com;
location / {
proxy_pass http://192.168.0.100:8080;
}
}
server {
listen 80;
server_name test2.xxx.com;
location / {
proxy_pass http://192.168.0.100:8081;
}
}
注:server_name后面可以有多个域名,
如 server_name test1.xxx.com test2.xxx.com; 表示 test1.xxx.com和test2.xxx.com都走同样的代理
或者使用通配符,如 server_name test1.xxx.*; 表示test1.xxx.com,test1.xxx.com.cn,test1.xxx.net等等都走同样的代理。
当某个请求没有匹配到以上两个server_name时,nginx会默认转向到第一个server里,nginx把第一个server作为默认服务。也可以手动指定哪个服务作为默认服务。在端口号后面加 default_server即可。如下:
server {
listen 80;
server_name test1.xxx.com;
location / {
proxy_pass http://192.168.0.100:8080;
}
}
server {
listen 80 default_server;
server_name test2.xxx.com;
location / {
proxy_pass http://192.168.0.100:8081;
}
}
4, 当需要映射的服务很多,写的server块就很多,则可以拆分nginx.conf配置文件,在conf目录新建一个目录host,在host目录中新建xx.conf文件,有几个服务需要映射,就新建几份,如下是有8个服务,则新建了8个配置文件,
1) 编辑xx.conf,将server块拷贝到xx.conf配置文件里,一个文件就配置一个块。
2) 编辑nginx.conf文件,将所有server块去掉,在http块加上
include host/*.conf;,表示加载host目录里所有配置文件。
如何开启apache虚拟目录反向代理
现有2个项目,A:php项目,B:java项目。由于域名解析只能使用80端口,因此需要apache来反向代理。apache使用80端口,tomcat使用8080.
apache下httpd.conf中开启以下模块:
# Virtual hosts 加载虚拟主机功能
Include conf/extra/httpd-vhosts.conf#开启代理相关模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.soLoadModule vhost_alias_module modules/mod_vhost_alias.so
httpd-vhosts中添加
<VirtualHost *:80>
ServerName yxj.zhoushangang.cn
ProxyPreserveHost On
ProxyRequests Off
ErrorLog logs/wap.xxx.com_error_log
CustomLog logs/wap.xxx.com_access_log common
</VirtualHost>
apache 配置虚拟目录 最初配置好后.好久没用了..又给忘了.在网上找了半天也试了大半个小时了..既然都出不来..看来网上的资料写的也不是很清楚.所以我特意小记了一下.要修改的文件是:apache目录下conf中的httpd.conf文件, 在文件中找到以下的内容 documentroot "d:/appserv/www" # # each directory to which apache has access can be configured with respect # to which services and features are allowed and/or disabled in that # directory (and its subdirectories). # # first, we configure the "default" to be a very restrictive set of # features. # options followsymlinks execcgi indexes allowoverride none order deny,allow deny from all satisfy all 如果要设置虚拟目录,则在这些内容的下方再添加以下的内容 alias /test "f:/test/" options indexes multiviews allowoverride none order allow,deny allow from all 重启一下apache服务,就可以直接用http://localhost:81/test 访问了..