四、java支持

  nginx可以通过tomcat增加jsp支持。默认情况下,CentOS可能已经安装java运行库JDK(http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html),可以通过下面的方式将其升级为最新版本。

4.1 安装jdk

  先按上面的地址下载新版本的JDK文件,要注意查看系统对应的版本(区分32位和64位)然后输入以下指令进行安装配置,如下所示:

tar zxvf jdk-7u45-linux-x64.tar.gz
mv /root/jdk1.7.0_45/ /usr/local/jdk
vim /etc/profile
exportJAVA_HOME=/usr/local/jdk
exportJRE_HOME=/usr/local/jdk/jre
exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
exportCLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

wKioL1PF3evQF0jVAAFQOwD7WN8683.jpg

update-alternatives --install /usr/bin/java java /usr/local/jdk/bin/java300
update-alternatives --install /usr/bin/javac javac/usr/local/jdk/bin/javac 300
update-alternatives --config java
update-alternatives --config javac

wKioL1PF3gGAG1hRAAD310IJ4vk325.jpg

java –version

wKiom1PF3P2iuivIAAB7DH76vGw536.jpg

4.2 安装tomcat

  从以下的地址下载tomcat组件(http://tomcat.apache.org/download-70.cgi),选择core版本就可以了。

wget http://apache.dataguru.cn/tomcat/tomcat-7/v7.0.47/bin/apache-tomcat-7.0.47.tar.gz
tar zxvf apache-tomcat-7.0.47.tar.gz
mv apache-tomcat-7.0.47 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh
ps aux |grep tomcat
netstat –tlnp

wKioL1PF3liSsx6_AAGClctfPko576.jpg

wKiom1PF3UGQQCz7AAO4B102KA4372.jpg

vim /usr/local/tomcat/conf/server.xml
<Connectorport="8080" protocol="HTTP/1.1"
                connectionTimeout="20000"
                 redirectPort="8443"/>
 <Host name="localhost"  appBase="/var/www/html"
      unpackWARs="true"autoDeploy="true">  #根目录,页面文件要放在/var/www/html/ROOT下面

wKioL1PF3nrBUQAbAAD8TN22TVA990.jpg

mkdir /var/www/html/ROOT
vim /var/www/html/ROOT/index.jsp
Hello,tomcat home!

wKioL1PF3pLRwzxuAABf4FtxX7s251.jpg

vim /usr/local/tomcat/conf/web.xml

wKioL1PF3r7BYNR7AACU3pinFcA415.jpg

4.3 设置nginx

  可以通过代理转发的方式实现和tomcat的整合,通过设定只要扩展名为.jsp的请求就转发至8080的tomcat进行处理。

vim /etc/nginx/proxy.conf
proxy_redirect         off;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP$remote_addr; #获取真实IP
#proxy_set_header      X-Forwarded-For   $proxy_add_x_forwarded_for; #获取代理者的真实ip
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffer_size       4k;
proxy_buffers           432k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
vim /etc/nginx/nginx.conf
location ~ \*.jsp$ {
                root ./ROOT;
                index index.jsp;
                proxy_pass      http://127.0.0.1:8080;
                                }

wKioL1PF3uPwfMn3AAFkIstyDvE542.jpg

4.4 测试

  先重启tcomcat和nginx并新建html测试文件,如下所示。

vim /var/www/html/index.html
the port:80

wKioL1PF3wXSy1wsAAA9djYMS_k955.jpg

kill `ps aux |grep tomcat |awk '/[0-9]/{print $2}' | head -n1`
/usr/local/tomcat/bin/startup.sh
service nginx restart

wKioL1PF3xmTAk3uAABMSPiniI0622.jpg

wKiom1PF3qnyaPCSAABVHWVxSgM184.jpg

五、访问者地理信息记录

  Nginx可以通过配置使用http_geoip_module模块来记录、使用访问者的信息,或是根据这些信息有选择的提供服务。

5.1 配置地理数据文件

wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
tar zxvf GeoIP.tar.gz
cd GeoIP-1.4.8/
./configure
make
make install

   如果在编译时出现“Libtool library used but `LIBTOOL' is undefined”的错误提示,这是因为 libGeoIP 自带了一个很旧的 ltmain.sh,这个文件导致成的 libtool 也很旧,这 个 libtool 忽略了在 link 时调用它时传给它的 -arch 参数,导致生成的 .dylib 不是 UB 的,从而导致最后 的 link 失败。解决方法如下:

yum install libtool
aclocal
libtoolize –force

  http_geoip_module模块会创建一些ngx_http_geoip_module变量,这些编码是基于客户端IP的,它会与MaxMind GeoIP文件进行匹配查询。默认情况下这些文件需要另外下载安装。

wget http://geolite.maxminx.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gzip -d GeoIP.dat.gz
gzip -d GeoLiteCity.dat.gz
mkdir /usr/local/nginx/geoip
mv /root/*.dat ./

5.2 配置nginx模块

  Nginx的默认安装并不包括http_geoip_module模块,需要在安装nginx时指定—with-http-geoip_module选项。下图是未加载该模块的情况:

wKioL1PF34zh4xsRAAD9fy8Gc34930.jpg

可以通下以下的指令新增模块,和全新安装nginx的方式相比,不需要执行make install只需在make成功后将nginx执行文件复制到原始的安装路径下就可以了。成功后的结果如下图所示:

./configure
 --prefix=/usr/local/nginx 
--conf-path=/etc/nginx/nginx.conf--pid-path=/var/run/nginx/nginx.pid 
--error-log-path=/var/log/nginx/nginx.log--http-log-path=/var/log/nginx/nginx-http.log
 --with-http_geoip_module
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.orig
cp /root/tengine/obj/nginx /usr/local/nginx/sbin/

wKiom1PF3sKgrtLhAAF9vri2lx4889.jpg

vim /etc/nginx/nginx.conf
geoip_country/usr/local/nginx/geoip/GeoIP.dat;
geoip_city/usr/local/nginx/geoip/GeoLiteCity.dat;

wKioL1PF4Avh8rdPAAFYpXbOjH4798.jpg

fastcgi_param   GEOIP_COUNTRY_CODE3 $geoip_country_code3;
fastcgi_param   GEOIP_COUNTRY_NAME $geoip_country_name;
fastcgi_param   GEOIP_CITY_COUNTRY_CODE$geoip_city_country_code;
fastcgi_param   GEOIP_CITY_COUNTRY_CODE3$geoip_city_country_code3;
fastcgi_param   GEOIP_CITY_COUNTRY_NAME$geoip_city_country_name;
fastcgi_param   GEOIP_REGION $geoip_region;
fastcgi_param   GEOIP_CITY $geoip_city;
fastcgi_param   GEOIP_POSTAL_CODE$geoip_city_continent_code;
fastcgi_param   GEOIP_LATITUDE $geoip_latitude;
fastcgi_param   GEOIP_LONGITUDE $geoip_longitude;
include         fastcgi_params;

wKiom1PF3wfjTLdhAAGNYMsLgrg483.jpg

/usr/local/nginx/sbin/nginx –s reload

5.3 测试地理信息

  建立以下的php测试文件检测IP所在的地区

vim /var/www/html/geoip.php
<html>
<head>
<title>What is my IPaddress - determine or retrieve my IP address </title>
</head>
<body>
<?php
if(getenv(HTTP_X_FORWARDED_FOR)){
$pipaddress = getenv(HTTP_X_FORWARDED_FOR);
$ipaddress =getenv(REMOTE_ADDR);
echo "You Proxy IPaddress is :".$pipaddress."(via $ipaddress)";
                        } else {
                                $ipaddress =getenv(REMOTE_ADDR);
                                echo "YourIP address is :$ipaddress";
                                }
$country =getenv(GEOIP_COUNTRY_NAME);
$country_code =getenv(GEOIP_COUNTRY_CODE);
echo "<br/>Yourcountry :$country($country_code)";
?>
</body>
</html>

wKioL1PF4FCjPTzeAAGDOeFtl8g319.jpg

wKiom1PF34fBG1VmAACD1UEyiE4145.jpg

vim /var/www/html/geoip_city.php
<html>
<head>
<title>What is my IPaddress - determine or retrieve my IP address</title>
</head>
<body>
<?php
if (getenv(HTTP_X_FORWARDED_FOR)) {
  $pipaddress = getenv(HTTP_X_FORWARDED_FOR);
  $ipaddress = getenv(REMOTE_ADDR);
  echo"<br>Your Proxy IP address is:".$pipaddress."(via $ipaddress)";
} else {
        $ipaddress = getenv (REMOTE_ADDR);
        echo"<br>Your IP address is: $ipaddress";
        }
$geoip_city_country_code =getenv(GEOIP_CITY_COUNTRY_CODE);
$geoip_city_country_code3 =getenv(GEOIP_CITY_COUNTRY_CODE3);
$geoip_city_country_name =getenv(GEOIP_CITY_COUNTRY_NAME);
$geoip_region =getenv(GEOIP_REGION);
$geoip_city =getenv(GEOIP_CITY);
$geoip_postal_code =getenv(GEOIP_POSTAL_CODE);
$geoip_city_continent_code= getenv(GEOIP_CITY_CONTTINENT_CODE);
$geoip_latitude =getenv(GEOIP_LATITUDE);
$geoip_longitude =getenv(GEOIP_LONGITUDE);
echo"<br>Country:$geoip_city_country_name($geoip_city_country_code3,$geoip_city_country_code)";
echo"<br>Region:$geoip_region";
echo"<br>City:$geoip_city";
echo"<br>Postalcode:$geoip_postal_code";
echo"<br>Citycontinent code:$geoip_city_continent_code";
echo"<br>Geoiplatitude:$geoip_latitude";
echo"<br>Geoiplongitude:$geoip_longitude";
?>
</body>

wKioL1PF4K7hf9CLAADh0BcaHdg714.jpg

wKiom1PF35fDcZBRAAOT5u3GSgE421.jpg