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高级应用的主要内容,如果未能解决你的问题,请参考以下文章