Nginx常见问题 Tomcat服务器 Tomcat高级应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx常见问题 Tomcat服务器 Tomcat高级应用相关的知识,希望对你有一定的参考价值。


#########################################################################################################

nginx优化:
nginx优化主要从配置文件来着手优化:
worker_processes         //与CPU核心数一致
worker_connections     //每个worker的最大并发连接数
server_tokens        //服务器版本信息
client_herder_buffer_size    //默认请求包头信息的缓存大小
large_client_header_buffer    //大请求包头部信息的缓存个数和容量
error page 404             //自定义404错误页面

#####################################################################################################

服务端地址:192.168.4.5
客户端地址:192.168.4.100

服务端:

#安装nginx(前面博客中有具体安装方法)
#/usr/local/nginx/sbin/nginx  //启动服务
#netstat -anptu | grep "80"     //验证是否启动

客户端:

#yum -y install httpd-tools
#ab -n 2000 -c 2000 http://192.168.4.5  //使用ab这个工具,来测试服务端的并发量
socket:Too many open files(24)          //大量的文件被打开,表示服务器不能正常打开页面。

所以,我们需要对服务端的最大并发量进行优化。

###################################################################################################

服务端:
#vim /usr/local/nginx/conf/nginx.conf
......
worker_processes 1;
events {
worker_connections 30000    //每个worker最大并发连接数改为30000
use epoll;
}
相当于再软件撒谎嗯对并发量作的优化.

#vim /etc/security/limits.conf
*    soft nofile        1000000
*    hard nofile        1000000
#ulimit -Hn 100000
#ulimit -Sn 100000

相当于在硬件上对最大并发量做的优化

客户端测试:
#ulimit -Hn 100000
#ulimit -Sn    100000
客户端也需要进行并发量的提高.
#ab -n 2000 -c 2000 http://192.168.4.5    //不再出现Too many open files(24).表示正常.

################################################################################################

在我们的客户端对我们的服务端进行访问时,我们可以看到我们的nginx的版本信息,那么攻击者就会通过当前版本的BUG来对我们的服务端进行攻击,所以我们就需要隐藏我们的nginx版本信息.

服务端:
#vim /usr/local/nginx/conf/nginx.conf
http {
server_tokens off;                    //不显示nginx版本号信息

server {
        listen       80;
        server_name  www.tarena.com;
        location / {
            root   html;
            index  index.html index.htm;
        }
}
}

客户端:
#curl -i http://192.168.4.5        //看不到版本信息,实现安全防护.

############################################################################################################

当我们的客户端访问过程中,如果请求包头信息过大,导致访问会出现  Request-URI Too large ,页面不能正常正常显示.所以我们需要对nginx进行优化.

服务端:
#vim buffer.sh  //利用脚本模拟包头信息过大
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
        URL=${URL}v$i=$i
done
curl $URL
#bash buffer.sh    //显示的内容中会出现 Request-URI Too large

#vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes  2;                    //与CPU核心数量一致
events {
worker_connections 65535;        //每个worker最大并发连接数
use epoll;
}
http {
server_tokens off;                        //不显示nginx版本号信息
client_header_buffer_size    1m;          //默认请求包头信息的缓存大小改为1m   
large_client_header_buffers  4 4k;        //大请求包头部信息的缓存个数与容量
gzip on;                         //启用压缩,可以更快速的传输数据
gzip_min_length 1000;                //最小压缩大小为1000k
gzip_comp_level 4;                
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;        //压缩的文件类型
server {
        listen       80;
        server_name  www.tarena.com;
        location / {
            root   html;
            index  index.html index.htm;
        }

#bash buffer.sh     //不再显示request URI Too large

#################################################################################################

在我们的客户端访问过程中,有些文件或者图片,我们可以缓存到客户端上,这样客户端再次访问相同文件或图片时,就不需要服务端找到相应的文件和图片发送给客户端,既提高了响应时间,又缓解了服务端的压力.

服务端:
#vim /usr/local/nginx/conf/nginx.conf

.. ..
worker_processes  2;                    //与CPU核心数量一致
events {
worker_connections 65535;        //每个worker最大并发连接数
use epoll;
}
http {
server_tokens off;                    //不显示nginx版本号信息
client_header_buffer_size    1k;        //默认请求包头信息的缓存    
large_client_header_buffers  4 4k;        //大请求包头部信息的缓存个数与容量
gzip on;
gzip_min_length 1000;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
        listen       80;
        server_name  www.tarena.com;
        location / {
            root   html;
            index  index.html index.htm;
        }
location ~* \.(jpg|jpeg|png|gif|css|js|ico|xml)$ {    //定义缓存的文件格式
expires 30d;                            //客户端缓存时间为30天
}
}
}

客户端:
#清除firefox缓存
#firefox http://192.168.4.5
#导航栏输入 about:cache 点击list cache entries  //可以查看访问的缓存天数.

#############################################################################################################

自定义404页面:

服务端:
#vim /etc/local/nginx/conf/nginx.conf
.. ..
worker_processes  2;                    //与CPU核心数量一致
events {
worker_connections 65535;        //每个worker最大并发连接数
use epoll;
}
http {
server_tokens off;                    //不显示nginx版本号信息
client_header_buffer_size    1k;        //默认请求包头信息的缓存    
large_client_header_buffers  4 4k;        //大请求包头部信息的缓存个数与容量
gzip on;
gzip_min_length 1000;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
        listen       80;
        server_name  www.tarena.com;
        location / {
            root   html;
            index  index.html index.htm;
        }
location ~* \.(jpg|jpeg|png|gif|css|js|ico|xml)$ {    //定义缓存的文件格式
expires 30d;                            //客户端缓存时间为30天
}
error_page  404 /40x.html;                    //定义404页面,页面可以自行编辑.
location = /40x.html {
    root html;
}
}
}

客户端:
#firefox http://192.168.4.5/dasdsad    //访问一个不存在的页面,就会出现自定义的404页面.

#######################################################################################################

Tomcat:

JDK:是Sun针对JAVA开发者推出的JAVA语言的软件开发工具包.

JRE:JAVA运行环境,运行JAVA程序所必须的环境的集合.JRE为JDK的子集.

JAVA servlet:
    Servlet是一种扩展Web服务器功能的组建规范.
      它能够以一种可以值的方法来提供动态的.面向用户的内容,处理用户请求.

常见的Servlet容器
--IBM    websphere
--Oracle weblogic
--Apache tomcat
--RedHat Jboss
开发者一般主要开发的是Servlet容器中的Servlet代码.

##########################################################################################################

Tomcat:

服务端:
#yum -y install java-1.8.0-openjdk            //安装jdk1.8.0
#yum -y install java-1.8.0-openjdk-headless

#tar -zcf apache-tomcat-8.0.30.tar.gz
#mv apache-tomcat-8.0.30 /usr/local/tomcat
#ls /usr/local/tomcat
bin                                //主程序目录
lib                                //库文件
logs                                //日志文件
webapps                            //默认网页目录
temp                                //临时目录
work                                //自动编译目录jsp转换为Servlet
conf                                //配置文件目录

#vim  /usr/local/tomcat/webapps/ROOT/test.jsp
<html>
<body>
<center>
Now time is: <%=new java.util.Date()%>            //显示服务器当前时间
</center>
</body>
</html>

#vim /usr/local/tomcat/bin/startup.sh    //启动服务
#netstat -anptu | grep "java"            //查看java监听端口
tcp        0      0 :::8080              :::*                LISTEN      2778/java      //启动端口     
tcp        0      0 ::ffff:127.0.0.1:8005     :::*         LISTEN       2778/java      //停止端口

客户端验证:

#firefox http://127.0.0.1:8080            //显示tomcat默认页面
# firefox http://127.0.0.1:8080/test.jsp    //显示系统当前时间


########################################################################################################33

tomcat配置文件:

-->server.xml        //主配置文件

-->context.xml        //定义会话管理器,JDBC等

-->tomcat-users.xml    //用户认证的帐号和密码配置文件

主配置文件解析:

Server是Tomcat实例的顶层元素,一个tomcat实例
Service是一个集合,它由一个或者多个Connector以及一个Engine组成
Connector负责接受用户的请求和向用户返回响应结果
Engine负责处理所有的Connector所获得的客户请求,它处理在同一个Servise中的所有Connector元素接收到的客户请求,它匹配请求和自己的虚拟主机,并将请求发送给相应的<Host>处理,默认的主机是localhost
一个<Engine>元素可以包含多个<Host>元素,每个<Host>元素,定义一个虚拟主机,它包含一个或多个Web应用.

##################################################################################################

Tomcat虚拟主机:

服务端:
# vim /usr/local/tomcat/conf/server.xml    //创建虚拟主机
… …
<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
</Host>
<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
</Host>

# mkdir -p  /usr/local/tomcat/{aa,bb}/ROOT            //创建网页根目录
# echo "AAA"   > /usr/local/tomcat/aa/ROOT/index.html    //书写网页内容
# echo "BBB" > /usr/local/tomcat/bb/ROOT/index.html

# /usr/local/tomcat/bin/shutdown.sh                //重启服务
# /usr/local/tomcat/bin/startup.sh


客户端:
# vim /etc/hosts                        //创建本地解析
… …
192.168.4.5    www.aa.com  www.bb.com
# firefox http://www.aa.com:8080/            //显示AAA
# firefox http://www.bb.com:8080/            //显示BBB

##############################################################################################

修改网站的首页目录:

服务端:

#vim /usr/local/tomcat/conf/server.xml
<Host name="www.aa.com" appbase="aa" unpackWARs="true" autoDeploy="true">
<Context path="" docBass="base" />
</Host>

//appBase定义基础目录,基础目录下面可以由很多项目,默认项目是ROOT
//docBass定义首页路径,默认为ROOT

# mkdir  /usr/local/tomcat/aa/base
# echo "BASE" > /usr/local/tomcat/aa/base/index.html

# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh

客户端验证:
#firefox http://www.aa.com:8080/    //结果为base页面

#####################################################################################################

页面跳转:

服务端:
#vim /usr/local/tomcat/conf/server.xml
<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true" >
<Context path="" docBase="base"/>
<Context path="/test" docBase="/var/www/html" />    //当用户访问http://www.aa.com/test打开/var/www/html目录下的页面
</Host>


//path指定用户访问的URL,docBase指定页面的存储位置.

# echo "Test" > /var/www/html/index.html
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh

客户端:

客户端验证:
#firefox http://www.aa.com:8080/test    //返回/var/www/html/index.html的内容 ,结果为test页面

#############################################################################################

ssl加密:

#keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore //提示输入密码为123456

# vim /usr/local/tomcat/conf/server.xml
… …
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456" clientAuth="false" sslProtocol="TLS" /> //这里的文件位置,需要和存放密钥的文件位置相同.密码也要和密钥中的相同.

//否则客户端访问就会出现一直正在连接,不报错,也不显示页面.

#/usr/local/tomcat/bin/catalina.sh stop
#/usr/local/tomcat/bin/catalina.sh start

客户端测试:

#firefox https://www.test.com:8443/
# firefox https://www.test.com:8443/        //显示安全链接,添加信任即可

####################################################################################################

每个虚拟主机设置不同的日志文件:



服务端:
# vim /usr/local/tomcat/conf/server.xml
<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
      <Valve className="org.apache.catalina.valves.AccessLogValve"
               prefix="aa_access" suffix=".log"
                        pattern="common"/> //设置www.aa.com网站的日志文件为aa_access
</Host>
<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
               prefix="bb_access" suffix=".log"
                        pattern="common"/>  设置www.bb.com网站的日志文件为bb_access
</Host>



# /usr/local/tomcat/bin/catalina.sh stop
# /usr/local/tomcat/bin/catalina.sh start

客户端:

#ls /usr/local/tomcat/logs
显示相应的日志文件.

#################################333########33########################################################

tomcat优化:
#vim /usr/local/tomcat/bin/catalina.sh

<Connector port="8080"
    protocol="HTTP/1.1"
    maxThreads="1000"        //客户请求最大线程数
    minSpareThreads="100"
    maxSpareThreads="1000"    //最大空闲线程数
    enableLookups="false"
    URIEncoding="utf-8"
    acceptCount="1000"    //监听端口队列最大数
/>

############################################################################

以上是关于Nginx常见问题 Tomcat服务器 Tomcat高级应用的主要内容,如果未能解决你的问题,请参考以下文章

redhat6.5 Tomcat+Nginx+Memcacheed集群部署

centos 7部署Tomcat及其负载均衡配置详解

nginx+Tomcat反向代理实现session会话保持

Linux中tomcat

tomcat部署与多实例

Nginx+Tomcat负载均衡集群