在上线的过程中遇到问题,我的应用占用的8080端口,服务器的安全策略不允许这个端口被外部访问。让运维的童鞋帮忙配置nginx反向代理,却被拒绝,说太麻烦,而且配好了也不一定能用。
因为自己不懂反向代理怎么配,于是被忽悠回来。嗯,自己在测试环境配一个试试好了。
目标是用浏览器访问测试服务器 xxx.xx.xx 就会自动显示出原本要访问 xxx.xx.xx:8080的内容咯。
而内置了Jetty的应用本身不需要做啥修改,只是单纯的让Apache/Nginx转发。
一、先选择了Apache来实现反向代理Jetty。
Apache的安装包下载地址:http://mirror.bit.edu.cn/apache/httpd/httpd-2.0.64.tar.bz2
若按照Apache源码包中的INSTALL一步一步安装,是无法实现反向代理的哦。因为这样安装完,PREFIX/modules下面没有反向代理需要使用的代码块。
所以,安装的时候需要先用这个配置。PREFIX是你安装apache时候可以指定的目录,默认是/usr/local/apache2/
$ ./configure --enable-mods-shared="proxy proxy_http proxy_ftp proxy_connect"
$ make
$ make install
那么ls PREFIX/modules下就会出现这些东东。
httpd.exp mod_proxy_ftp.so mod_proxy.so
mod_proxy_connect.so mod_proxy_http.so
然后修改PREFIX/conf/httpd.conf
在httpd.conf头部加入这样的配置:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
ProxyRequests Off
<Proxy *&rt;
Order deny,allow
Allow from all
</Proxy&rt;
ProxyPass / http://localhost:8080/
最后,PREFIX/bin/apachectl start
二、再选择Nginx来实现反向代理Jetty
Ngnix安装包下载地址:http://nginx.org/download/nginx-1.2.5.tar.gz
这个就按照Nginx的官方说明安装好了,解压后进入nginx-1.2.5目录
$ ./configure --prefix=/usr/local/nginx --without-http_rewrite_module --with-http_ssl_module
$ make
$ make install
进入/usr/local/nginx,修改conf/nginx.conf,在和默认的server{}平行的位置上加入这段配置:
server{
listen 80;
server_name "";
location / {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Read-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
然后,sbin/nginx
-------------------------------------------------------------------------------
自己试了试,两个办法都可以。其实不论是Apache还是Nginx转发Jetty的配置都不难,运维的童鞋为啥就是不肯帮我咧。郁闷!