设为首页 收藏本站
查看: 497|回复: 0

[经验分享] Nginx常见问题、Tomcat服务器、Tomcat高级应用

[复制链接]
YunVN网友  发表于 2018-12-1 12:10:12 |阅读模式
  1 案例1:Nginx常见问题处理
1.1 问题
本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能:
不显示Nginx软件版本号
如果客户端访问服务器提示“Too many open files”如何解决
如何解决客户端访问头部信息过长的问题
开启gzip压缩功能,提高数据传输效率
如何让客户端浏览器缓存数据
如何自定义返回给客户端的404错误页面
然后客户机访问此Web服务器验证效果:
使用ab压力测试软件测试并发量
编写测试脚本生成长头部信息的访问请求
客户端访问不存在的页面,测试404错误页面是否重定向
1.2 方案
  Nginx优化主要从配置文件着手,常见优化参数如下:
worker_processes //与CPU核心数量一致
worker_connections //每个worker最大并发连接数
server_tokens //服务器版本号信息
client_header_buffer_size //默认请求包头信息的缓存
large_client_header_buffers //大请求包头部信息的缓存个数与容量
error_page 404 //自定义404错误页面
1.3 步骤
步骤一:构建Nginx服务器
1)源码安装Nginx软件
1.[root@svr5 ~]# yum -y install gcc pcre-devel openssl-devel        //安装常见依赖包
2.[root@svr5 ~]# useradd -s /sbin/nologin nginx
3.[root@svr5 ~]# tar  -zxvf   nginx-1.8.0.tar.gz
4.[root@svr5 ~]# cd  nginx-1.8.0
5.[root@svr5 nginx-1.8.0]# ./configure   \
6.> --prefix=/usr/local/nginx   \                //指定安装路径
7.> --user=nginx   \                            //指定用户
8.> --group=nginx  \                            //指定组
9.> --with-http_ssl_module                        //开启SSL加密功能
10.[root@svr5 nginx-1.8.0]# make && make install    //编译并安装
2)启用Nginx服务并查看监听端口状态
1.[root@svr5 ~]# /usr/local/nginx/sbin/nginx
2.[root@svr5 ~]# netstat  -anptu  |  grep nginx
3.tcp        0        0 0.0.0.0:80        0.0.0.0:*        LISTEN        10441/nginx
步骤二:优化前从客户机访问Nginx服务器测试
1)使用ab高并发测试
1.[root@svr100 ~]# ab –n 2000 –c 2000 http://192.168.4.5/
2.Benchmarking 192.168.4.5 (be patient)
3.socket: Too many open files (24)                //提示打开文件数量过多
2)使用脚本测试长头部请求是否能获得响应
1.[root@svr100 ~]# cat buffer.sh
2.#!/bin/bash
3.URL=http://192.168.4.5/index.html?
4.for i in {1..5000}
5.do
6.    URL=${URL}v$i=$i
7.done
8.curl $URL
9.[root@svr100 ~]# chmod +x buffer.sh
10.[root@svr100 ~]# ./ buffer.sh
11... ..
12.414 Request-URI Too Large        //提示头部信息过大
3)使用Firefox浏览器测试客户端缓存
以Firefox浏览器为例,只要在地址栏内输入 http://192.168.4.5/a.jpg,回车后即连接目标主机192.168.4.5的Web服务,获得服务器上的a.jpg图片资源。若访问成功,再次,在Firefox地址栏内输入about:cache将显示Firefox浏览器的缓存信息
4)客户端使用浏览器访问不存在的页面
1.[root@svr5 ~]# firefox http://192.168.4.5/tt.html        //访问不存在的页面
步骤三:优化Nginx服务器
1)修改Nginx配置文件
1.[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
2... ..
3.worker_processes  2;                    //与CPU核心数量一致(cat /proc/cpuinfo | grep proce)
4.events {
worker_connections 65535;        //每个worker最大并发连接数
下载httpd-tools测试:
ab -c 100 -n 100 http://192.168.4.1/ 模拟多人同时访问测试。
ab -c 1025 -n 1025 http://192.168.4.1/ 默认值1024,大于会报错,服务器无法承受
Linux内核,对能并发打开的文件数量有限制1024
ulimit -a 看所有文件最多能打开多少 内核参数
ulimit -Hn 100000 硬限制hard (不可改,但超级管理员可以改)
ulimit -Sn 100000 软限制 soft (给定范围,可以改)
修改内核参数后再测试并发量
5.use epoll;
6.}
7.http {
8.server_tokens off;                    //不显示nginx版本号信息(屏蔽版本号)客户端查看curl -I http://192.168.4.1 (大i)
9.client_header_buffer_size    1k;        //默认请求包头信息的缓存    
10.large_client_header_buffers  4 4k;        //大请求包头部信息的缓存个数与容量
11.gzip on;    gzip压缩页面,对手机来说太费流量
12.gzip_min_length 1000; (小文件不压缩,至少达到1000k才可压缩。小文件越压越大)
13.gzip_comp_level 4;(压缩比例1-9,比例越小越慢)
14.gzip_types text/plain text/css (对什么格式的文件压缩。mp3,jpg,mp4,flv已经是压缩格式,对多媒体都不要压缩,只对文档文件压缩即可。对什么格式文档压缩,请参考mime.types找到对应参考,复制到此配置文件)application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
15.
16.server {

  • listen       80;
  • server_name  www.tarena.com;
  • location / {
  • root   html;
  • index  index.html index.htm;
  • }
    23.location ~ .(jpg|jpeg|gif|png|css|js|ico|xml)$ {   不区分大小写
    24.expires        30d;            //定义客户端缓存时间为30天,30天后过期
    25.} (让用户的浏览器缓存,仅对静态数据缓存)
    26.error_page   404  /40x.html;    //自定义错误页面报错
  • location = /40x.html {
  • root   html;
  • }
    30.}
    31.}
    2)修改Linux操作系统最大打开文件数
    通过修改/etc/security/limits.conf文件修改打开文件最大数量:
    1.[root@svr5 ~]# vim /etc/security/limits.conf (若永久生效配置可修改)
    用户和组         类型   限制内容  限制数值

    • soft nofile     100000
      2.*               hard nofile     100000
      3.[root@svr5 ~]# ulimit –Hn 100000
      4.[root@svr5 ~]# ulimit –Sn 100000
      3)提前生成404错误页面,供测试使用:
      1.[root@svr5 ~]# vim  /usr/local/nginx/html/40x.html

  • ~~^^^Error^^^~
  cp nginx.service /etc/
/usr/local/nginx/sbin/nginx -t   检查语法错误
  缓存:
  关闭20秒内无人请求的缓存
不管缓存有没有人请求,60秒后直接过期删掉
只有访问超过5次的才被缓存到内存
把缓存报错关闭
  forefox 地址栏:about:cache
清除缓存
配置nginx.conf 设置location缓存30天
打开firefox访问服务器
在about:cache中刷新,点击List Cache Entries
  盗链:
加上网上的图片地址


  url: 协议+主机+端口号+路径
http://www.tedu.cn:80/abc/
http://192.168.4.5:8080/test.jsp
  HTTP错误代码
报错页面nginx默认出错会返回出错码
200 一切正常
300 请求被重定向,页面还是会显示
400 请求语法错误
401 访问被拒绝(账户或密码错误)
403 资源不可用,通常由于服务器上文件或目录的权限设置导致
禁止访问:客户端的IP地址被拒绝
404 无法找到指定位置的资源(Not Found)可以自定义报错页面,返回特定页面
414 请求URI头部太长
500 服务器内部错误
502 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答(Bad Gateway)
  案例2:安装部署Tomcat服务器(java型软件)
  官方:jdk (java套件)
第三方:openjdk
jre (java运行环境)
shell--python--php--java--c--汇编 难度递增
2.1 问题
本案例要求部署Tomcat服务器,具体要求如下:
安装部署JDK基础环境
安装部署Tomcat服务器
创建JSP测试页面,文件名为test.jsp,显示服务器当前时间
然后客户机访问此Web服务器验证效果:
使用火狐浏览器访问Tomcat服务器的8080端口,浏览默认首页
使用火狐浏览器访问Tomcat服务器的8080端口,浏览默认测试页面
2.2 方案
使用2台RHEL7虚拟机,其中一台作为Tomcat服务器(192.168.2.5)、另外一台作为测试用的Linux客户机(192.168.2.100)
使用RPM安装JDK基础环境
使用源码安装部署Tomcat服务器
调整Tomcat配置文件,禁用默认的8009端口
2.3 步骤
步骤一:部署服务器软件
1)使用RPM安装JDK环境
1.[root@svr5 ~]# yum –y install  java-1.8.0-openjdk                //安装JDK
2.[root@svr5 ~]# yum –y install java-1.8.0-openjdk-headless        //安装JDK
3.[root@svr5 ~]# java –version                                    //查看JAVA版本
2)安装Tomcat
1.[root@svr5 ~]# tar -xzf  apache-tomcat-8.0.30.tar.gz
2.[root@svr5 ~]# mv apache-tomcat-8.0.30  /usr/local/tomcat
3.[root@svr5 ~]# ls /usr/local/tomcat
4.bin/                                            //主程序目录
5.lib/                                            //库文件目录
6.logs/                                          //日志目录  
7.temp/                                         //临时目录
8.work/                                        //自动编译目录jsp代码转换servlet
9.conf/                                        //配置文件目录
10.webapps/                                        //页面目录
步骤二:修改Tomcat配置文件
1)创建测试JSP页面
1.[root@svr5 ~]# vim  /usr/local/tomcat/webapps/ROOT/test.jsp
2.
3.
4.
5.Now time is:             //显示服务器当前时间
6.
7.
8.
2)启动服务
1.[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
步骤三:验证测试
1)服务器验证端口信息
1.[root@svr5 ~]# netstat -nutlp |grep java        //查看java监听的端口
2.tcp        0      0 :::8080              :::                LISTEN      2778/java           
3.tcp        0      0 ::ffff:127.0.0.1:8005     :::
         LISTEN       2778/java           
2)客户端浏览测试页面
1.[root@client ~]# firefox http://127.0.0.1:8080
2.[root@client ~]# firefox http://127.0.0.1:8080/test.jsp
3 使用Tomcat部署虚拟主机
3.1 问题
沿用练习二,使用Tomcat部署加密虚拟主机,实现以下要求:
实现两个基于域名的虚拟主机,域名分别为:www.aa.com和 www.bb.com
使用www.aa.com域名访问的页面根路径为/usr/local/tomcat/aa/ROOT
使用www.bb.com域名访问的页面根路径为/usr/local/tomcat/bb/ROOT
访问页面时支持SSL加密通讯
私钥、证书存储路径为/usr/local/tomcat/conf/cert
每个虚拟主机都拥有独立的访问日志文件
server.xml 主配置文件
context.xml
tomcat-users.xml
3.2 方案
修改server.xml配置文件,创建两个域名的虚拟主机,修改如下两个参数块:
1.# cat /usr/local/tomcat/conf/server.xml
2.… …
3.
4.
5.
6.
7.… …
提示:修改server.xml配置文件,通过在中添加Context,我们也可以指定页面的根路径位置,默认为ROOT
1.
生产SSL密钥与证书文件
1.#keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:配置服务器虚拟主机
1)修改server.xml配置文件,创建虚拟主机 (所有的网站必须放在engine里面,连接端口才能访问进来)
1.[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
2.… …
3.
4.
5.
6.
2)创建虚拟主机对应的页面根路径
1.[root@svr5 ~]# mkdir -p  /usr/local/tomcat/{aa,bb}/ROOT
2.[root@svr5 ~]# echo "AAA"   > /usr/local/tomcat/aa/ROOT/index.html
3.[root@svr5 ~]# echo "BBB" > /usr/local/tomcat/bb/ROOT/index.html
3)重启Tomcat服务器
1.[root@svr5 ~]# /usr/local/tomcat/bin/shutdown.sh
2.[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
4)客户端设置host文件,并浏览测试页面进行测试
1.[root@client ~]# vim /etc/hosts
2.… …
3.192.168.4.5    www.aa.com  www.bb.com
4.[root@client ~]# firefox http://www.aa.com:8080/
5.[root@client ~]# firefox http://www.bb.com:8080/
启动失败:
cd /dev
mv random random.bak
ln -s /dev/urandom /dev/random
tomcat用random随机生成密钥,random和urandom都是提取随机数据
步骤二:修改网站的首页目录(非必须)
1)使用docBase参数可以修改默认网站首页路径
1.[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
2.… …
3.
4.
5. (或者 ) 指定页面根路径 (可重新加载)
6.
7.
8.
9.
10.… …
11.[root@svr5 ~]# mkdir  /usr/local/tomcat/aa/base
12.[root@svr5 ~]# echo "BASE" > /usr/local/tomcat/aa/base/index.html
13.[root@svr5 ~]# /usr/local/tomcat/bin/shutdown.sh
14.[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
2)测试查看页面是否正确
1.[root@client ~]# firefox http://www.aa.com:8080/    //结果为base页面的内容
步骤三:跳转 类似nginx的rewrite
1)当用户访问http://www.aa.com/test打开/var/www/html目录下的页面
1.[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
2.… …
3.
4.
5.
6.
7.
8.
9.
10.… …
11.[root@svr5 ~]# echo "Test" > /var/www/html/index.html
12.[root@svr5 ~]# /usr/local/tomcat/bin/shutdown.sh
13.[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
2)测试查看页面是否正确
查询哪里就会匹配哪里,不加/test会出现www.a.com的AA界面
1.[root@client ~]# firefox http://www.aa.com:8080/test    
2.//返回/var/www/html/index.html的内容
步骤四:配置Tomcat支持SSL加密网站
证书:密钥、证书所有者、担保者信息
1.生成密钥(jdk)
[root@proxy ~]# keytool -genkeypair \
  -alias tomcat \
-keyalg RSA \
-keystore /usr/local/tomcat/keystore
(keytool -genkeypair \ 生成密钥对
alias tomcat \ 给密钥取别名
keyalg RSA \ 密钥算法RSA,DSA
keystore密钥存放的文件名 /usr/local/tomcat/keystore 提示输入密码和信息)
1)创建加密用的私钥和证书文件 生成密钥
1.[root@svr5 ~]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore                //提示输入密码为:123456
2)再次修改server.xml配置文件,创建支持加密连接的Connector 调用密钥
1.[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
2.… …
3.
3)重启Tomcat服务器
1.[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh stop
2.[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh start
4)客户端设置host文件,并浏览测试页面进行测试
1.[root@client ~]# vim /etc/hosts
2.… …
3.192.168.4.5    www.aa.com  www.bb.com
4.[root@client ~]# firefox https://www.test.com:8443/ 测试记得改端口号为8443,https
5.[root@client ~]# firefox https://www.test.com:8443/
  在Engine外面写加密,所以加密只要加一次,所有网站就都加密了
步骤四:配置Tomcat日志
1)为每个虚拟主机设置不同的日志文件
1.[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
2.


  • 6.
    7.
    8.
    11.
    2)重启Tomcat服务器
    1.[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh stop
    2.[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh start
    3)查看服务器日志文件
    1.[root@svr5 ~]# ls /usr/local/tomcat/logs/
  Tomcat: 一个host是一个网站
Nginx: 一个server是一个网站
httpd:一个Virtualhost是一个网站
  和apache和nginx不同,tomcat的端口号和网站是不绑定到一起的,所有网站都被放在Engine    里面,connector把请求转发给Engine
  优化并发量:
connector 影响并发量





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-641952-1-1.html 上篇帖子: eclipse 使用tomcat插件及部署tomcat项目 下篇帖子: JAVA与Tomcat(续一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表