Centos 下配置 Nginx+Tomcat 动静分离
(htm/html等静态文件由nginx处理、jsp动态文件由tomcat处理)
=================================================================================
一、Tomcat安装
chmod +x jdk-6u27-linux-i586.bin
./jdk-6u27-linux-i586.bin
mv jdk1.6.0_27 /usr/local/java

tar zxvf apache-tomcat-7.0.22.tar.gz
mv apache-tomcat-7.0.22 /usr/local/tomcat

vim /etc/profile
追加:
export JAVA_HOME="/usr/local/java"
export CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
export PATH=".:$PATH:$JAVA_HOME/bin "
export CATALINA_HOME="/usr/local/tomcat"
export JAVA_HOME CATALINA_HOME

source /etc/profile

启动&配置tomcat

/usr/local/tomcat/bin/configtest.sh #测试
/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat/bin/shutdown.sh #关闭
service iptables stop
输入http://192.168.1.150:8080,如果看到tomcat默认页面即安装成功

添加虚拟主机
vim /usr/local/tomcat/conf/server.xml
追加:
<Host name="test.com" appBase="bbs"
unpackWARs="true" autoDeploy="true"
xmlValidation="false” xmlNamespaceAware=”false”>
<Context path="" docBase="/www/web" debug="0" reloadable="true" crossContext="true"/>
</Host>

根据不同的运行环境,做相应修改!
调整tomcat内存
在tomcat安装目录下bin文件夹中,修改catalina.sh文件。
vim /usr/local/tomcat/bin/catalina.sh
# Bugzilla 37848: only output this if we have a TTY
if [ $have_tty -eq 1 ]; then
在此处追加:
JAVA_OPTS="-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true"
注:Xms表示初始内存大小,Xmx表示最大占用内存大小。
把代码中256换成你需要设置的内存大小,重启tomcat就可以了,替换前衡量一下服务器的承受能力。
二、安装配置Nginx
tar zxvf pcre-8.12.tar.gz
cd pcre-8.12
./configure --prefix=/usr/local/pcre
make
make install

tar zxvf openssl-1.0.0e.tar.gz
cd openssl-1.0.0e
./config --prefix=/usr/local/openssl
make
make install

tar zxvf nginx-1.1.5.tar.gz
cd nginx-1.1.5
./configure --prefix=/usr/local/nginx --with-pcre=/root/pcre-8.12 --with-openssl=/root/openssl-1.0.0e --with-cc-opt="-I /usr/local/openssl/include/openssl/" --with-http_stub_status_module --with-http_ssl_module
make
make install
注:--with-pcre=/root/pcre-8.12 此处为源码路径,不是编译安装后的路径

groupadd www
useradd www -s /sbin/nologin -d /www -g www

nginx.conf相关配置
vim /etc/rc.local
ulimit -SHn 65535 #设置系统打开最大文件数为65535,(系统默认为1024)

nginx.conf配置
vim /usr/local/nginx/conf/nginx.conf
user www www; #运行nginx所在的用户名和用户组
worker_processes 4; #启动进程数
error_log /usr/local/nginx/logs/nginx_error.log crit; #全局错误日志及PID文件
pid /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 65535; #单进程打开的最大文件数
events { #工作模式及连接数上限
use epoll;
worker_connections 51200; #每个进程最大连接数(最大连接=连接数x进程数)
}

http {
include mime.types; #设定mime类型

default_type application/octet-stream; #设置nginx生成日志格式
log_format main ’$remote_addr - $remote_user [$time_local] ”$request” ’
‘$status $body_bytes_sent ”$http_referer” ’
‘”$http_user_agent” $http_x_forwarded_for $request_length $request_time’ $upstream_addr $server_name;
include /usr/local/nginx/conf/proxy.conf; #反向代理配置文件
include /usr/local/nginx/conf/vhosts/*conf; #虚拟主机配置文件
charset utf8; #默认编码

server_tokens off; #关闭nginx版本号
server_names_hash_bucket_size 128; #服务器名字的哈希存储大小
client_header_buffer_size 32k; #设定请求缓冲,nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大, 它会使用large_client_header_buffers来读取
large_client_header_buffers 4 32k;
sendfile on; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络IO处理速度,降低系统 uptime。
send_timeout 60; #客户端发送内容超时
tcp_nopush on; #网络连接选择
keepalive_timeout 60; #指定客户端保活超时时间
tcp_nodelay on; #网络连接选择

gzip on; #设置gzip

gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本
gzip_comp_level 7; #压缩比率
gzip_types text/plain application/json application/x-javascript text/css application/xml; #压缩类型
gzip_vary on; #vary header支持
limit_zone crawler $binary_remote_addr 10m; #目录限速

#设置负载均衡服务器 (可根据具体部署情况来设置)
upstream test.com {
server 127.0.0.1:8080;
}
###禁止通过ip访问站点
server{
listen 80 default;
server_name _;
return 404;
}

配置proxy.conf, 添加如下内容:
vim /usr/local/nginx/conf/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; #获取代理者的真实
client_max_body_size 300m; #允许客户端请求的最大单个文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 90; #跟后端服务器连接的超时时间_发起握手等待响应超时时间
proxy_send_timeout 90; #后端服务器数据回传时间_就是在规定时间内后端服务器必须传完所有的数据
proxy_read_timeout 90; #连接成功后_等待后端服务器响应时间_其实已经进入后端的排队之中等待处理
proxy_buffer_size 4k; #设置请求缓存区_这个缓存区会保存用户的头信息以供nginx进行规则处理_一般只要能保存下头信息即可
proxy_buffers 4 32k; #同上告诉nginx保存单个用的几个Buffer最大用多少空间
proxy_busy_buffers_size 64k; #如果系统忙碌时候可以申请更大的proxy_buffers 官方推荐*2
proxy_temp_file_write_size 64k; #缓存临时文件的大小
proxy_intercept_errors on;
g、配置虚拟主机
mkdir /usr/local/nginx/conf/vhosts
vim /usr/local/nginx/conf/vhosts/test.conf
server
{
listen 80; #监听端口
server_name test.com; #主域名
index index.html index.htm index.jsp; #默认首页
access_log /usr/local/nginx/logs/test_log main; #访问日志
error_log /usr/local/nginx/logs/test_error_log error; #错误日志
root /www/web; #网站根目录
#limit_conn crawler 20;
location ~.*(htm|html|gif|jpg|jpeg|png|bmp|ico|txt)$ #设定访问静态文件直接读取不经过tomcat
{
root /www/hs;
expires 30d;
}
location /
{
proxy_next_upstream http_502 http_504 error timeout invalid_header; #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移
proxy_passhttp://test.com; #转向tomcat处理
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
注:/etc/hosts中添加相应hosts记录
/usr/local/nginx/sbin/nginx -t #检查配置文件
/usr/local/nginx/sbin/nginx #启动
ps -ef | grep nginx
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
/usr/local/nginx/sbin/nginx -s stop #停止