发表于: 2017-06-07 11:13:18

1 1249


今日完成

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

我的脚本

#!/bin/sh

git pull Java javatask2mvn -U clean install -Dmaven.test.skip=true/usr/local/tomcat/apache-tomcat-7.0.77/bin/shutdown.shrm -rf /usr/local/tomcat/apache-tomcat-7.0.77/webapps/*cp /usr/local/myGitTestFolder/java/target/Task_2.war /usr/local/tomcat/apache-tomcat-7.0.77/webapps//usr/local/tomcat/apache-tomcat-7.0.77/bin/startup.sh

剩下的时间完成深度思考

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上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

可以提供从防火墙外部代理服务器到防火墙内部安全内容服务器的加密连接。
可以允许客户机安全地连接到代理服务器,从而有利于安全地传输信息(如信用卡号)。
安全反向代理会造成各安全连接因加密数据所涉及的系统开销而变慢。但是,由于 SSL 提供了高速缓存机制,所以连接双方可以重复使用先前协商的安全参数,从而大大降低后续连接的系统开销。


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配置文件中进行修改。

2.1、优化线程数

找到Connectorport="8080" protocol="HTTP/1.1",增加maxThreads和acceptCount属性(使acceptCount大于等于maxThreads),如下:

<Connectorport="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />


2.2、使用线程池

在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的反向代理配置没搞明白

明日计划

开始任务四


返回列表 返回列表
评论

    分享到