发表于: 2017-06-07 11:13:18
1 1250
今日完成
nginx日志输出格式
log_format combined '$remote_addr - $remote_user [$time_local] ' ' "$request" $status $body_bytes_sent ' ' "$http_referer" "$http_user_agent" ';
$remote_addr, $http_x_forwarded_for(反向) 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent 发送给客户端的总字节数。
$connection 连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local 通用日志格式下的本地时间。
根据任务要求,需要记录响应时间 增加'$request_time'
左边框内为响应时间
参考师兄的配置修改nginxconf,子域名
server {
listen 80; # 监听80端口
server_name task2.semonx.com; # 接收该域名请求
# 配置错误页面
location = /50x.html {
root /usr/local/nginx/html;
}
location / { # 访问该server的根路径
proxy_pass http://127.0.0.1:8080/task2/; # 代理为该url,比如http://task2.semonx.com会被代理为http://127.0.0.1:8080/task2/student
proxy_redirect default; # 处理重定向的url,比如被代理的服务器返回重定向的url为http://127.0.0.1:8080/task2/student/30,处理后就会变成http://task2.semonx.com/student/30
proxy_set_header X-Real-IP $remote_addr; # 将真实请求的客户端IP加入request的头部
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 将真实请求的代理信息加入request的头部
}
}
这个问题没搞明白
重新编辑nginx日志shell脚本
#!/bin/bash
echo "访问student接口的次数为:"
num= cat access.log |grep student |wc -l
echo "其中20ms内的有: $num20"
num20= cat access.log |grep student |awk '{print $1,$19}' |awk '{print substr($2,4)}' |awk '{if($1<0.020)print $1}' |wc -l
echo "其中10ms内的有:$num10"
num10= cat access.log |grep student |awk '{print $1,$19}' |awk '{print substr($2,4)}' |awk '{if($1<0.010)print $1}' |wc -l
中间调整nginx配置多次遇到500和404错误
编写简单的shell脚本,以实现自动化部署。参考童志荣师兄的日志
通过编写shell脚本,只要执行一个shell脚本项目就可以发布到服务器
第一步:安装git
第二步:把git远程库中最新代码pull下来
第三步:打包war
第四步:war包移动到tomcat webapps文件夹下,重启tomcat
我的脚本
剩下的时间完成深度思考
shell脚本语言还要多练练
今天被师兄批评过于依赖视窗操作winscp,以后以命令行操作为主吧。
1.java的war包、jar包分别是什么?有什么区别
JavaSE程序可以打包成Jar包(J其实可以理解为Java了),而JavaWeb程序可以打包成war包(w其实可以理解为Web了)。然后把war发布到Tomcat的webapps目录下,Tomcat会在启动时自动解压war包。
要注意的是,虽然WAR文件和JAR文件的文件格式是一样的,并且都是使用jar命令来创建,但就其应用来说,WAR文件和JAR文件是有根本区别的。JAR文件的目的是把类和相关的资源封装到压缩的归档文件中,而对于WAR文件来说,一个WAR文件代表了一个Web应用程序,它可以包含 Servlet、HTML页面、Java类、图像文件,以及组成Web应用程序的其他资源,而不仅仅是类的归档文件。
2.nginx服务器有什么作用?什么叫反向代理?为什么要使用反向代理?
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
3.什么是ssh?如何在linux服务器上从网站下载文件?
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。
wget是Linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径
例如: # wget http://www.linuxsense.org/xxxx/xxx.tar.gz
1.sftp
建立连接:sftp user@host
从本地上传文件:put localpath
下载文件:get remotepath
与远程相对应的本地操作,只需要在命令前加上”l” 即可,方便好记。
2.scp
SCP :secure copy (remote file copy program) 也是一个基于SSH安全协议的文件传输命令。与sftp不同的是,它只提供主机间的文件传输功能,没有文件管理的功能。
复制local_file 到远程目录remote_folder下
scp local_file remote_user@host:remote_folder
复制local_folder 到远程remote_folder(需要加参数 -r 递归)
scp –r local_folder remote_user@host:remote_folder
以上命令反过来写就是远程复制到本地
3.sz/rz
sz/rz 是基于ZModem传输协议的命令。对传输的数据会进行核查,并且有很好的传输性能。使用起来更是非常方便,但前提是window端需要有能够支持ZModem的telnet或者SSH客户端,例如secureCRT。
首先需要在secureCRT中可以配置相关的本地下载和上传目录,然后用rz、sz命令即可方便的传输文件数据。
下载数据到本地下载目录:sz filename1 filename2 …
上传数据到远程:执行rz –be 命令,客户端会弹出上传窗口,用户自行选择(可多选)要上传的文件即可。
覆盖原文件 rz -be -y
4.如何写shell脚本?尝试自己编写一个简单脚本。
打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。
输入一些代码,第一行一般是这样:
#!/bin/bash
echo "Hello World !"
将上面的代码保存为 test.sh,并 cd 到相应目录:
chmod +x ./test.sh #使脚本具有执行权限./test.sh #执行脚本
5.tomcat、jetty、resin各容器有什么区别?如何优化这些容器配置?
tomcat应用广,jetty轻量灵活,resin用的不多。
tomcat为例说优化
内存优化
优化内存,主要是在bin/catalina.bat或bin/catalina.sh 配置文件中进行。linux上,在catalina.sh中添加:
JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M"
连接数优化
#优化连接数,主要是在conf/server.xml配置文件中进行修改。
找到Connectorport="8080" protocol="HTTP/1.1",增加maxThreads和acceptCount属性(使acceptCount大于等于maxThreads),如下:
<Connectorport="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />
在server.xml中增加executor节点,然后配置connector的executor属性,如下:
<Executorname="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/> <Connectorport="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>
三种运行模式
1)BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下在Linux系统中默认使用这种方式。
2)NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动(conf/server.xml配置文件):
<Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"redirectPort="8443"/>
3)APR(Apache Portable Runtime):从操作系统层面解决io阻塞问题。Linux如果安装了apr和native,Tomcat直接启动就支持apr。
收获
nginx日志输出配置修改,简单的shell脚本编写
困难
nginx的反向代理配置没搞明白
明日计划
开始任务四
评论