日志记录中HTTP状态码出现499错误有多种情况,我遇到的一种情况是nginx反代到一个永远打不开的后端,就这样了,日志状态记录是499、发送字节数是0。
老是有用户反映网站系统时好时坏,因为线上的产品很长时间没有修改,所以前端程序的问题基本上可以排除,于是就想着是Get方式调用的接口不稳定,问了相关人员,说没有问题,为了拿到确切证据,于是我问相关人员要了nginx服务器的日志文件(awstats日志),分析后发现日志中很多错误码为499的错误,约占整个日志文件的1%,而它只占全部报错的70%左右(全部报错见下图),那么所有报错加起来就要超过1%了,这个量还是特别大的。
499错误是什么?让我们看看NGINX的源码中的定义:
ngx_string(ngx_http_error_495_page), /* 495, https certificate error */
ngx_string(ngx_http_error_496_page), /* 496, https no certificate */
ngx_string(ngx_http_error_497_page), /* 497, http to https */
ngx_string(ngx_http_error_404_page), /* 498, canceled */
ngx_null_string, /* 499, client has closed connection */
可以看到,499对应的是 “client has closed connection”。这很有可能是因为服务器端处理的时间过长,客户端“不耐烦”了。
Nginx 499错误的原因及解决方法
打开Nginx的access.log?现在最后一次的提交是出现了HTTP1.1 499 0 -这样的错误,在百度搜索nginx 499错误,结果都是说客户端主动断开了连接。
但经过我的测试这显然不是客户端的问题,因为使用端口+IP直接访问后端服务器不存在此问题,后来测试nginx发现如果两次提交post过快就会出现499的情况,看来是nginx认为是不安全的连接,主动拒绝了客户?的连接.
但搜索相关问题一直找不到解决方法,最后终于在google上搜索到一英文论坛上有关于此错误的解决方法:
proxy_ignore_client_abort on;
Don’t know if this is safe.
就是说要配置参数 proxy_ignore_client_abort on;
表示代理服务端不要主要主动关闭客户端连接。
以此配置重启nginx,问题果然得到解决。只是安全方面稍有欠缺,但比总是出现找不到服务器好多了。
还有一种原因是 我后来测试发现 确实是客户端关闭了连接,或者说连接超时 ,无论你设置多少超时时间多没用 原来是php进程不够用了 改善一下php进程数 问题解决 默认测试环境才开5个子进程。
以上所述是小编给大家介绍的HTTP 499 状态码 nginx下 499错误的解决办法,希望对大家有所帮助
-
#!/bin/bash
-
-
databases=(要备份的数据库名)
-
-
basepath=’/root/backup/’
-
-
if [ ! -d “$basepath” ]; then
-
mkdir -p “$basepath”
-
fi
-
-
for db in ${databases[*]}
-
do
-
/bin/nice -n 19 /usr/bin/mysqldump -u数据库账号 -p数据库密码 –database $db > $basepath$db-$(date +%Y%m%d).sql
-
-
/bin/nice -n 19 tar zPcf $basepath$db-$(date +%Y%m%d).sql.tar.gz $basepath$db-$(date +%Y%m%d).sql
-
-
find $basepath -mtime +7 -name “*.sql.tar.gz” -exec rm -rf {} ;
-
done
-
-
-
#rm -rf $basepath/*.sql
脚本如上,我这里的脚本为/root/db.sh
备份的地址
basepath=’/root/backup/’
可以自己修改
/bin/nice -n 19是设置优先级
备份数据库的命令是mysqldump,命令在/usr/bin/目录下面
这句代码是删除7天前的备份文件
find $basepath -mtime +7 -name “*.sql.tar.gz” -exec rm -rf {} ;
这句代码是删除生成的sql中间文件,但是我这里把它注释掉了,也就是说?会删除,如果要删除自己把注释去掉
#rm -rf $basepath/*.sql
注意代码最好是在CentOS系统中手动敲,别在windows系统中敲了再传到CentOS系统中,因为有可能因为编码原因造成脚本运行有问题。
脚本写好后要通过crontab -e命令设置脚本定时运行
crontab -e
0 3 * * * /root/db.sh
然后保存
这样就是每天凌晨3:00自动运行脚本,即自动备份数据库
1、首先配置nginx及其他插件,这个Google下,很多配置方案。
2、配置服务器的证书。操作步骤如下:
[root@localhost ~]# cd /etc/pki/tls/certs
[root@localhost certs]# make server.key
umask 77 ;
/usr/bin/openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus
………………………………………………++++++
………….++++++
e is 61251 (0x10001)
Enter pass phrase:# set passphrase
Verifying – Enter pass phrase:# confirm
# remove passphrase from private key
[root@localhost certs]# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:# input passphrase
writing RSA key
[root@localhost certs]#
[root@localhost certs]# make server.csr
umask 77 ;
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:CN #country
State or Province Name (full name) [e]:Beijing #state
Locality Name (eg, city) [Default City]:Beijing #city
Organization Name (eg, company) [Default Company Ltd]:Test #company
Organizational Unit Name (eg, section) []:Test Haha #department
Common Name (eg, your server’s hostname) []:www.landui.com #server’s FQDN
Email Address []:admin@test.com # email address
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:# Enter
An optional company name []:# Enter
[root@localhost certs]#
[root@localhost certs]# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=/C=CN/ST=Beijing/L=Beijing/O=Test/OU=Test Haha/CN=www.landui.com,/emailAddress=admin@test.com
Getting Private key
[root@localhost certs]# chmod 400 server.*
3、配置nginx的conf文件
#server {
# listen 80;
# server_name happy.cc.com;
# rewrite ^(.*)$ permanent;
# }
server {
listen 80;
listen 443 ssl;
server_name happy.cc.com;
location / {
root /data/www/cloud;
index index.html;
}
ssl on;
ssl_certificate /data/webserver/nginx/conf/server.crt;
ssl_certificate_key /data/webserver/nginx/conf/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
#autoindex on;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location ~ .php$ {
root /data/www/cloud;
fastcgi_pass unix:/tmp/php-cgi.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/cloud$fastcgi_script_name;
include fastcgi_params;
}
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*.(js|css)?$
{
expires 1h;
}
access_log /data/log/nginx/happy.access.log access;
error_log /data/log/nginx/happy.error.log warn;
}
4、打开iptables的443端口
相关的启动命令
service wdapache start|stop|restart wdcp后台 启动|停止|重起
service nginxd start|stop|restart nginx服务 启动|停止|重起
service httpd start|stop|restart httpd服务 启动|停止|重起
service pureftpd start|stop|restart ftp服务 启动|停止|重起
service mysqld start|stop|restart mysql服务 启动|停止|重起
查看当前磁盘分区情况
fdisk -l
磁盘分区
fdisk /dev/sdb
创建PV
pvcreate /dev/sdb1
pvcreate /dev/sdb2
确认PV
pvdisplay
pvdisplay /dev/sdb1
pvdisplay /dev/sdb2
创建VG
vgcreate myVG /dev/sdb1 /dev/sdb2
or
vgcreate myVG /dev/sdb1; vgextend myVG /dev/sdb2
确认VG
vgdisplay
创建LV
lvcreate -L 400 -n vol01 myVG
lvcreate -L 1000 -n vol02 myVG
# -L size, 400M, 1000M
# -n lv‘s name
确认LV
lvdisplay
创建Filesystem
mkfs.ext3 /dev/myVG/vol01
mkfs.ext3 /dev/myVG/vol02
挂载Mount Filesystem
mkdir -p /data1
mkdir -p /data2
mount /dev/myVG/vol01 /data1
mount /dev/myVG/vol02 /data2
编辑写入/etc/fstab
# file system|mount point|type|options|dump|pass
/dev/myVG/vol01 /data1 ext3 rw,noatime 0 0
/dev/myVG/vol02 /data2 ext3 rw,noatime 0 0
扩展LV
lvextend -L +800 /dev/myVG/vol01
# -L size 800M
重置FS大小(扩张此时才实际生效)
resize2fs /dev/myVG/vol01
删除LV
lvremove /dev/myVG/vol02
【问题分析】
我们可以使用chown命令,ch这里代表change(改变)的意思,own代表英文单词的owner(拥有者),连在一起就是 change owner ,改变某个文件或者文件夹的拥有者。
一般只有root用户有使用这个命令的权限,也是经常会使用到的一个命令。问题来了!如果我要把一个文件夹及其所有子内容授权给mysql用户,我该如何
操作呢?
【解决方案】
我们可以加 -R 参数来实现
-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)
比如 : 我要把landui.com授权给mysql用户
这是landui.com的目录结构
我们将整个文件夹授权给mysql用户
我们看一下现在的权限
我们可以看到,全部都授权成功了,说明这个参数是可用的。
错误提示:
Thinkphp.php的23行是
const THINK_VERSION = ‘3.2.1’; 报错是const关键字的问题
框架和入口文件本身没有问题 应该是你的php版本太低了 建议5.3
你可以在入口文件 一开始的地方加上下面这句测试一下
if(version_compare(PHP_VERSION,’5.3.0′,'<‘)) die(‘require PHP > 5.3.0 !’);
有的时候我们需要查看一个包的详细信息,我们可以使用rpm -qi 命?,比如我要查看apache的信息,如下,rpm -qi httpd
我们可以看到版本号,安装时间,等等一些介绍。
RPM软件包管理器
英文原义:RPM Package Manager(原Red Hat Package Manager,现在是一个递归缩写)
出来常用命令,httpd还有一个优雅的重启命令,如下图
这个命令的意思是什么呢?
他和我们的正常的重启的区别是什么呢,正常的重启服务器会断开我们现在所有的连接,graceful呢是等待客户正在进行的连接连接完之后再进行重启。
如果我们改了配置需要重启,我们可以使用着这个命令,让客户可以不察觉到我们这次重启,我们试下:
使用 .htaccess 屏蔽 User Agent 的方法很多,这里使用 rewrite 规则把这些 User Agent 转移走,以达到屏蔽的效果。
代码如下
RewriteCond %{HTTP_USER_AGENT} “.*EmbeddedWB.*” [OR]
RewriteCond %{HTTP_USER_AGENT} “.*QunarBot.*” [OR]
RewriteCond %{HTTP_USER_AGENT} “.*Windows 98.*” [OR]
RewriteCond %{HTTP_USER_AGENT} “^Mozilla/4.0$”
RewriteRule ^(.*)$ http://www.landui.com/
使用 .htaccess 需要了解一些正则表达式语法,以正确匹配字符串。
如果你觉得有用,屏蔽恶意 User Agent前,不妨先分析一下自己的网站日志,根据自己的需要定制。可以使用 Firefox+User Agent Switcher 测试效果,Chrome 也有类似的切换 User Agent 的扩展程序。
若现在没有错误出现,WWW服务器将执行请求所要求的动作。要获取(GET)一个文档,web服务器在其文档树中搜索请求的文件(/sample.html)。这是由服务器机器上作为操作系统一部分的文件系统完成的。若文件能找到并可正常读取,则服务器将把它返回给客户。
如果成功:文件被发送出去。
首先,web服务器发送一个状态码及一些描述信息。既然文件已经找到,则发送状态码200,表示一切都OK ,文档随后发出,因为发送的信息是HTML文档,所以Content-type 取值为text/html。文档长为1024个字节,所以Content-type 取1024 。服务器软件的标识及文件的时间属性信息也被包含在头域中。
如果失败:返回错误指示。
如果请求的文件没有找到或找到但无法读取,测请求无法满足。这时将返回不同于200的状态码。最常见的问题是请求中的文件名拼写有误,所以服务器无法找到该文件。这种情况下,服务器将发送一个状态码—404 给客户。
1. 系统禁止ping
#echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
2. 系统允许ping
#echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
一、压缩文件的原理
压缩技术,简而言之,我们可以将其想象成:其实文件里面有很多的“空间“存在,并不是完全填满的,而“压缩“技术就是将这些“空间“填满,从而使得整个文件占用量下降。
目前我们的操作系统数据中,都是使?字节(byte)单位来计量,不过事实上,计算机中最小的计量单位应该是位(bit),我们知道 1 byte = 8 bit。那么我们是怎么样对一些数据进行记录的呢?
例如我们只是需要记忆一?数字,即1这个数字,考虑到计算机所谓的二进制,如此一来, 1 会在最右边占据 1 个 bit ,而其他? 7 个 bits 将会自动的被填上 0 !其实在这样的例子中,那 7 个 bits 应该是 【空的】 才对!不过,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为 byte 的型态来记录。而压缩技术就是将这些没有使用到的空间“丢“出来。
文件压缩以后可以降低磁盘的使用量,减少文件的大小。不过这些“压缩过的文件“无法直接被操作系统所使用,因此,若要使用这些被压缩过的文件数据,则必?将它“还原“成未被压缩的样子,这就是“解压缩“。
实例一:将这个/etc目录下的文件全部打包成 /home/etc.tar
[root@uu home]# tar -cvf etc.tar /etc –>> 这个命令只是用来打包,不进行压缩
[root@uu home]# tar -zcvf etc.tar /etc –>> 打包以后,使用gzip 对其进行压缩
[root@uu home]# tar -jcvf etc.tar /etc –>> 打包以后,使用bzip2 对其进行压缩
# 特别注意,在参数 f 之后的档案档名是自己取的,我们习惯上都用 .tar 来作为标识。
# 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file
# 如果加 j 参数,则以 .tar.bz2 来作为扩展名
实例二:查看上述etc.tar 文件里有哪些内容
[root@uu ~]# tar -ztvf etc.tar
# 由于我们使用 gzip 压缩,所以要查阅该 tarfile 内的文件时,
# 就得要加上 z 这个参数
实例三:将etc.tar 文件解压缩到当前目录下
[root@uu home]# tar -zxvf etc.tar
# 此时我们可以发现当前目录下已经有了一个etc的文件夹,里面就是我们解压缩出来的文件
实例四:如果我只是希望将 etc.tar 中的 etc/passwd 解压出来
[root@uu home]# tar -zxvf etc.tar etc/passwd
# 我可以通过 tar -ztvf 来查阅 tarfile 内的文件名,如果单只要一个文件,
# 就可以通过这个方式来完成。注意?! etc.tar.gz 内的根目录 / 不见了
实例五:备份/etc 内的所有文件,并且保存其权限
[root@uu home]# tar -zxvpf etc.tar.gz /etc/
# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时
实例六:在/home 中,比2013/04/01 新的文件就进行备份
[root@uu home]# tar -N ‘2013/04/01’ -zcvf home.tar /home
实例七:我要备份/home,/etc的所有文件,但是不要备份/home/uu这个目录下的文件
[root@uu home]# tar –exclude /home/uu -zcvf myfile.tar.gz /home/* /etc
chmod
【语法】chmod [选项][参数]
【详解】chmod命令用于改变文件或目录的权限,设置权限有字符和数字两种设定方法。
在数字设定法中,0表示没有权限,1表示可执行权限,2表示可写权限,4表?可读权限,以上数字相加所得到的数最最终权限。如可写可读为6,可执行和可读为5权限。
在英文设定法中,r表示可读权限,w表示可写权限,x表示可执行权限,-表示无任何权限。
将/home/wwwroot/里的所有文件和文件夹设置为755权限
(1)直接指定路径修改
(2)手动进入该目录修改权限(并显示详细过程)
搭建php环境因为wdcp默认环境下没有安装mod_speling.so模块所以导致大小写不能够顺畅转换浏览。
接下来我们介绍安装mod_speling.so模块的方法:
1.下载Apache HTTP Server 2.2.25
地址:http://www.landui.com/download.cgi#apache22
2.解压压缩包到本地
找到modulesmappers下mod_speling相关文件mod_speling打头的五个文件
上传到到服务器/www/wdlinux/httpd-2.2.22/bin/mappers/ 目录下
3.然后登录ssh执行
cd /www/wdlinux/httpd-2.2.22/bin/mappers/
/www/wdlinux/httpd-2.2.22/bin/apxs -c -i -a mod_speling.c
4.执行完之后修改 httpd.conf文件,路径是 /www/wdlinux/httpd-2.2.22/conf下
打开文件搜索 LoadModule speling_module modules/mod_speling.so 在下方添加 CheckSpelling on
所有步骤操作完成,重启web!
notconnect
特别修改内容:$_config[‘db’][‘1’][‘dbpw’] = ‘此处密码,是否与数据库密码一致’;
1.1、find命令的一般形式
man文档中给出的find命令的一般形式为:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]
其实[-H] [-L] [-P] [-D debugopts] [-Olevel]这几个选项并不常用(至少在我的日常工作中,没有用到过),上面的find命令的常用形式可以简化为:
find [path…] [expression]
-
path:find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录
-
expression:expression可以分为——“-options [-print -exec -ok …]”
-
-options,指定find命令的常用选项,下节详细介绍
-
-print,find命令将匹配的文件输出到标准输出
-
-exec,find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为‘command‘ { } ;,注意{ }和;之间的空格
find https://www.landui.com/ -size 0 -exec rm {} ; 删除文件大小为零的文件 (还可以以这样做:rm -i `find https://www.landui.com/ -size 0` 或 find https://www.landui.com/ -size 0 | xargs rm -f &)
为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中:find . -type f -exec ls -l { } ;
在/logs目录中查找更改时间在5日以前的文件并删除它们:find /logs -type f -mtime +5 -exec rm { } ; -
-ok,和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
find . -name “*.conf” -mtime +5 -ok rm { } ; 在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示
也有人这样总结find命令的结构:
find start_directory test
options
criteria_to_match
action_to_perform_on_results
1.2、find命令的常用选项及实例
-
-name
按照文件名查找文件。
find /dir -name filename 在/dir目录及其子目录下面查找名字为filename的文件
find . -name “*.c” 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件 -
-perm
按照文件权限来查找文件。
find . -perm 755 –print 在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件 -
-prune
使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
find /apps -path “/apps/bin” -prune -o –print 在/apps目录下查找文件,但不希望在/apps/bin目录下查找
find /usr/sam -path “/usr/sam/dir1” -prune -o –print 在/usr/sam目录下查找不在dir1子目录之内的所有文件 -
-user
按照文件属主来查找文件。
find ~ -user sam –print 在$HOME目录中查找文件属主为sam的文件 -
-group
按照文件所属的组来查找文件。
find /apps -group gem –print 在/apps目录下查找属于gem用户组的文件 -
-mtime -n +n
按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。
find / -mtime -5 –print 在系统根目录下查找更改时间在5日以内的文件
find /var/adm -mtime +3 –print 在/var/adm目录下查找更改时间在3日以前的文件 -
-nogroup
查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
find / –nogroup -print -
-nouser
查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
find /home -nouser –print -
-newer file1 ! file2
查找更改时间比文件file1新但比文件file2旧的文件。 -
-type
查找某一类型的文件,诸如:
b – 块设备文件。
d – 目录。
c – 字符设备文件。
p – 管道文件。
l – 符号链接文件。
f – 普通文件。
find /etc -type d –print 在/etc目录下查找所有的目录
find . ! -type d –print 在当前目录下查找除目录以外的所有类型的文件
find /etc -type l –print 在/etc目录下查找所有的符号链接文件 -
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
find . -size +c –print 在当前目录下查找文件长度大于1 M字节的文件
find /home/apache -size 100c –print 在/home/apache目录下查找文件长度恰好为100字节的文件
find . -size +10 –print 在当前目录下查找长度超过10块的文件(一块等于512字节) -
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
find / -name “CON.FILE” -depth –print 它将首先匹配所有的文件然后再进入子目录中查找 -
-mount:在查找文件时不跨越文件系统mount点。
find . -name “*.XC” -mount –print 从当前目录开始查找位于本文件系统中文件名以XC结尾的文件(不进入其他文件系统) -
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
1.3、find与xargs
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批?并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
find . -type f -print | xargs file 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
find / -name “core” -print | xargs echo “” >/tmp/core.log 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log ?件中:
find . -type f -print | xargs grep “hostname” 用grep命令在所有的普通文件中搜索hostname这个词
find https://www.landui.com/ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西 (find . -ctime +3 -exec rm -rf {} ;)
find https://www.landui.com/ -size 0 | xargs rm -f & 删除文件大小为零的文件
find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
Apache的主配置文件:/etc/httpd/conf/httpd.conf
默认站点主目录:/var/www/html/
Apache服务器的配置信息全部存储在主配置文件/etc/httpd/conf/httpd.conf中,这个文件中的内容非常多,用wc命令统计一共有1009行,其中大部分是以#开头的注释行。
[root@justin ~]# wc -l /etc/httpd/conf/httpd.conf
1009 /etc/httpd/conf/httpd.conf
[root@justin ~]#
配置文件包括三部分:
[root@justin ~]# grep ‘<Section>’ /etc/httpd/conf/httpd.conf -n
33: Section 1: Global Environment
245: Section 2: ‘Main’ server configuration
973: Section 3: Virtual Hosts
[root@justin ~]#
1)Global Environment—全局环境配置,决定Apache服务器的全局参数
2)Main server configuration—主服务配置,相当于是Apache中的默认Web站点,如果我们的服务器中只有一个站点,那么就只需在这里配置就可以了。
3)Virtual Hosts—虚拟主机,虚拟主机不能与Main Server主服务器共存,当启用了虚拟主机之后,Main Server就不能使用了
——————————————————————————–
1)Global Environment
44 ServerTokens OS
在出现错误页的时候是否显示服务器操作系统的名称,ServerTokens Prod为不显示
57 ServerRoot “/etc/httpd”
用于指定Apache的运行目录,服务启动之后自动将目录改变为当前目录,在后面使用到的所有相对路径都是想对这个目录下
65 PidFile run/httpd.pid
记录httpd守护进程的pid号码,这是系统识别一个进程的方法,系统中httpd进程可以有多个,但这个PID对应的进程是其他的父进程
70 Timeout 60
服务器与客户端断开的时间
76 KeepAlive Off
是否持续连接(因为每次连接都得三次握手,如果是访问量不大,建议打开此项,如果网站访问量比较大关闭此项比较好),修改为:KeepAlive On 表示允许程序性联机
83 MaxKeepAliveRequests 100
表示一个连接的最大请求数
89 KeepAliveTimeout 15
断开连接前的时间
102 <IfModule prefork.c>
103 StartServers 8
104 MinSpareServers 5
105 MaxSpareServers 20
106 ServerLimit 256
107 MaxClients 256
108 MaxRequestsPerChild 4000
109 </IfModule>
系统默认的模块,表示为每个访问启动一个进程(即当有多个连接公用一个进程的时候,在同一时刻只能有一个获得服务)。
StartServer开始服务时启动8个进程,最小空闲5个进程,最多空闲20个进程。
MaxClient限制同一时刻客户端的最大连接请求数量超过的要进入等候队列。
MaxRequestsPerChild每个进程生存期内允许服务的最大请求数量,0表示永不结束
118 <IfModule worker.c>
119 StartServers 4
120 MaxClients 300
121 MinSpareThreads 25
122 MaxSpareThreads 75
123 ThreadsPerChild 25
124 MaxRequestsPerChild 0
125 </IfModule>
为Apache配置线程访问,即每对WEB服务访问启动一个线程,这样对内存占用率比较小。
ServerLimit服务器允许配置进程数的上限。
ThreadLimit每个子进程可能配置的线程上限
StartServers启动两个httpd进程,
MaxClients同时最多能发起250个访问,超过的要进入队列等待,其大小有ServerLimit和ThreadsPerChild的乘积决定
ThreadsPerChild每个子进程生存期间常驻执行线程数,子线程建立之后将不再增加
MaxRequestsPerChild每个进程启动的最大线程数,如达到限制数时进程将结束,如置为0则子线程永不结束
136 Listen 80
监听的端口,如有多块网卡,默认监听所有网卡
123 150 LoadModule auth_basic_module modules/mod_auth_basic.so
……
201 LoadModule version_module modules/mod_version.so
启动时加载的模块
221 Include conf.d/*.conf
加载的配置文件
242 User apache
243 Group apache
启动服务后转换的身份,在启动服务时通常以root身份,然后转换身份,这样增加系统安全
2)Main server configuration
262 ServerAdmin root@localhost
管理员的邮箱
276 #ServerName www.landui.com:80
默认是不需要指定的,服务器通过名字解析过程来获得自己的名字,但如果解析有问题(如反向解析不正确),或者没有DNS名字,也可以在这里指定IP地址,当这项不正确的时候服务器不能正常启动。前面启动Apache时候提示正在启动 httpd:httpd: apr_sockaddr_info_get() failed forjustin httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1forServerName,解决方法就是启动该项把www.landui.com:80修改为自己的域名或者直接修改为localhost
1 285 UseCanonicalName Off
如果客户端提供了主机名和端口,Apache将会使用客户端提供的这些信息来构建自引用URL。这些值与用于实现基于域名的虚拟主机的值相同,并且对于同样的客户端可用。CGI变量SERVER_NAME和SERVER_PORT也会由客户端提供的值来构建
292 DocumentRoot “/var/www/html”
网页文件存放的目录
302 <Directory />
303 Options FollowSymLinks
304 AllowOverride None
305 </Directory>
对根目录的一个权限的设置
317 <Directory “/var/www/html”>
331 Options Indexes FollowSymLinks
338 AllowOverride None
343 Order allow,deny
344 Allow from all
346 </Directory>
对/var/www/html目录的一个权限的设置,options中Indexes表示当网页不存在的时候允许索引显示目录中的文件,FollowSymLinks是否允许访问符号链接文件。有的选项有ExecCGI表是否使用CGI,如Options Includes ExecCGI FollowSymLinks表示允许服务器执行CGI及SSI,禁止列出目录。SymLinksOwnerMatch表示当符号链接的文件和目标文件为同一用户拥有时才允许访问。AllowOverrideNone表示不允许这个目录下的访问控制文件来改变这里的配置,这也意味着不用查看这个目录下的访问控制文件,修改为:AllowOverride All 表示允许.htaccess。Order对页面的访问控制顺序后面的一项是默认选项,如allow,deny则默认是deny,Allowfromall表示允许所有的用户,通过和上一项结合可以控制对网站的访问控制
360 <IfModule mod_userdir.c>
366 UserDir disabled
375 </IfModule>
是否允许用户访问其家目录,默认是不允许
381 #<Directory /home/*/public_html>
382 # AllowOverride FileInfo AuthConfig Limit
383 # Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
384 # <Limit GET POST OPTIONS>
385 # Order allow,deny
386 # Allow from all
387 # </Limit>
388 # <LimitExcept GET POST OPTIONS>
389 # Order deny,allow
390 # Deny from all
391 # </LimitExcept>
392 #</Directory>
如果允许访问用户的家目录中的网页文件,则取消以上注释,并对其中进行修改
402 DirectoryIndex index.html index.html.var
指定所要访问的主页的默认主页名字,默认首页文件名为index.html
409 AccessFileName .htaccess
定义每个目录下的访问控制文件名,缺省为.htaccess
415 <Files ~ “^.ht”>
416 Order allow,deny
417 Deny from all
418 Satisfy All
419 </Files>
控制不让web上的用户来查看.htpasswd和.htaccess这两个文件
425 TypesConfig /etc/mime.types
用于设置保存有不同MIME类型数据的文件名
436 DefaultType text/plain
默认的网页的类型
443 <IfModule mod_mime_magic.c>
444 # MIMEMagicFile /usr/share/magic.mime
445 MIMEMagicFile conf/magic
446 </IfModule>
指定判断文件真实MIME类型功能的模块
456 HostnameLookups Off
当打开此项功能时,在记录日志的时候同时记录主机名,这需要服务器来反向解析域名,增加了服务器的负载,通常不建议开启
466 #EnableMMAP off
是否允许内存映射:如果httpd在传送过程中需要读取一个文件的内容,它是否可以使用内存映射。如果为on表示如果操作系统支持的话,将使用内存映射。在一些多核处理器的系统上,这可能会降低性能,如果在挂载了NFS的DocumentRoot上如果开启此项功能,可能造成因为分段而造成httpd崩溃
475 #EnableSendfile off
这个指令控制httpd是否可以使用操作系统内核的sendfile支持来将文件发送到客户端。默认情况下,当处理一个请求并不需要访问文件内部的数据时(比如发送一个静态的文件内容),如果操作系统支持,Apache将使用sendfile将文件内容直接发送到客户端而并不读取文件
1 484 ErrorLog logs/error_log
错误日志存放的位置
491 LogLevel warn
Apache日志的级别
497 LogFormat “%h %l 膹”%r” %>s %b “%{Referer}i” “%{User-Agent}i”” combined
498 LogFormat “%h %l 膹”%r” %>s %b” common
499 LogFormat “%{Referer}i -> %U” referer
500 LogFormat “%{User-agent}i” agent
定义了日志的格式,并用不同的代号表示
513 #CustomLog logs/access_log common
526 CustomLog logs/access_log combined
说明日志记录的位置,这里面使用了相对路径,所以ServerRoot需要指出,日志位置就存放在/etc/httpd/logs
536 ServerSignature On
定义当客户请求的网页不存在,或者错误的时候是否提示apache的版本的一些信息
551 Alias /icons/ “/var/www/icons/”
定义一些不在DocumentRoot下的文件,而可以将其映射到网页根目录中,这也是访问其他目录的一种方法,但在声明的时候切记目录后面加”/”
553 <Directory “/var/www/icons”>
554 Options Indexes MultiViews FollowSymLinks
555 AllowOverride None
556 Order allow,deny
557 Allow from all
558 </Directory>
定义对/var/www/icons/的权限,修改为 Options MultiViews FollowSymLinks表示不在浏览器上显示树状目录结构
563 <IfModule mod_dav_fs.c>
564 # Location of the WebDAV lock database.
565 DAVLockDB /var/lib/dav/lockdb
566 </IfModule>
对mod_dav_fs.c模块儿的管理
576 ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”
对CGI模块儿的的别名,与Alias相似。
582 <Directory “/var/www/cgi-bin”>
583 AllowOverride None
584 Options None
585 Order allow,deny
586 Allow from all
587 </Directory>
对/var/www/cgi-bin文件夹的管理,方法同上
# Redirect old-URI new-URL
Redirect参数是用来重写URL的,当浏览器访问服务器上的一个已经不存在的资源的时候,服务器返回给浏览器新的URL,告诉浏览器从该URL中获取资源。这主要用于原来存在于服务器上的文档改变位置之后,又需要能够使用老URL能访问到原网页
604 IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
611 AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
…
669 IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
当一个HTTP请求的URL为一个目录的时候,服务器返回这个目录中的索引文件,如果目录中不存在索引文件,并且服务器有许可显示目录文件列表的时候,就会显示这个目录中的文件列表,为了使得这个文件列表能具有可理解性,而不仅仅是一个简单的列表,就需要前这些参数。如果使用了IndexOptionsFancyIndexing选项,可以让服务器针对不同的文件引用不同的图标。如果没有就使用DefaultIcon定义缺省图标。同样,使用AddDescription可以为不同类型的文档介入描述
709 AddLanguage ca .ca
……
734 AddLanguage zh-TW .zh-tw
添加语言
743 LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
Apache支持的语言
759 AddDefaultCharset UTF-8
默认支持的语言
765 #AddType application/x-tar .tgz
支持的应用如果想支持对php的解析添加这样一行
773 #AddEncoding x-compress .Z
774 #AddEncoding x-gzip .gz .tgz
支持对以.Z和.gz.tgz结尾的文件
779 AddType application/x-compress .Z
780 AddType application/x-gzip .gz .tgz
添加对上述两种文件的应用
796 #AddHandler cgi-script .cgi
修改为:AddHandler cgi-script .cgi .pl 表示允许扩展名为.pl的CGI脚本运行
816 AddType text/html .shtml
817 AddOutputFilter INCLUDES .shtml
添加动态处理类型为server-parsed由服务器预先分析网页内的标记,将标记改为正确的HTML标识
833 #ErrorDocument 404 /missing.html
当服务器出现404错误的时候,返回missing.html页面
855 Alias /error/ “/var/www/error/”
赋值别名
857 <IfModule mod_negotiation.c>
858 <IfModule mod_include.c>
859 <Directory “/var/www/error”>
860 AllowOverride None
861 Options IncludesNoExec
862 AddOutputFilter Includes html
863 AddHandler type-map var
864 Order allow,deny
865 Allow from all
866 LanguagePriority en es de fr
867 ForceLanguagePriority Prefer Fallback
868 </Directory>
对/var/www/error网页的权限及操作
895 BrowserMatch “Mozilla/2” nokeepalive
896 BrowserMatch “MSIE 4.0b2;” nokeepalive downgrade-1.0 force-response-1.0
897 BrowserMatch “RealPlayer 4.0” force-response-1.0
898 BrowserMatch “Java/1.0” force-response-1.0
899 BrowserMatch “JDK/1.0” force-response-1.0
…..
设置特殊的参数,以保证对老版本浏览器的兼容,并支持新浏览器的特性
3)Virtual Hosts
990 #NameVirtualHost *:80
如果启用虚拟主机的话,必须将前面的注释去掉,而且,第二部分的内容都可以出现在每个虚拟主机部分。
998 # VirtualHost example:
1003 #<VirtualHost *:80>
1004 # ServerAdmin webmaster@www.landui.com
1005 # DocumentRoot /www/docs/www.landui.com
1006 # ServerName www.landui.com
1007 # ErrorLog logs/www.landui.com_log
1008 # CustomLog logs/www.landui.com_log common
1009 #</VirtualHost>
www.landui.com替换为你的网址
基础
filename for edition:wSave file:qExit Vim:q!Quit without saving:xWrite file (if changes has been made) and exit:sav filenameSaves file as
filename.Repeats the last change made in normal mode5.Repeats 5 times the last change made in normal mode
在文件中移动
59. Replace
59 by the desired line number.20|move cursor to column
20.%Move cursor to matching parenthesis[[Jump to function start[{Jump to block start
剪切、复制和粘贴
搜索
word from top to bottom?wordSearch
word from bottom to top*Search the word under cursor/cstringSearch
STRING or
string, case insensitive/jo[ha]nSearch
john or
joan/< theSearch the, theatre or
then/the>Search
the or
breathe/< the>Search
the/< ?.>Search all words of 4 letters//Search
fred but not
alfred or
frederick/fred|joeSearch
fred or
joe/<dddd>Search exactly 4 digits/^ {3}Find 3 empty lines:bufdo /searchstr/Search in all open filesbufdo %s/something/somethingelse/gSearch
something in all the open buffers and replace it with
somethingelse
替换
old by
new in file:%s/onward/forward/gireplace onward by forward, case unsensitive:%s/old/new/gcreplace all occurences with confirmation:2,35s/old/new/greplace all occurences between lines 2 and 35:5,$s/old/new/greplace all occurences from line 5 to EOF:%s/^/hello/greplace the begining of each line by
hello:%s/$/Harry/greplace the end of each line by
Harry:%s/onward/forward/giReplace
onward by
forward, case unsensitive:%s/ *$//gdelete all white spaces:g/string/ddelete all lines containing
string:v/string/ddelete all lines containing which didn’t contain
string:s/Bill/Steve/replace the first occurence of
Bill by
Steve in current line:s/Bill/Steve/gReplace
Bill by
Steve in current line:%s/Bill/Steve/gReplace
Bill by
Steve in all the file:%s/^M//gdelete DOS carriage returns (^M):%s/ / /gTransform DOS carriage returns in returns:%s#<[^>]+>##gdelete HTML tags but keeps text:%s/^(.*) 1$/1/delete lines which appears twiceCtrl+aIncrement number under the cursorCtrl+xDecrement number under cursorggVGg?Change text to Rot13
大小写
读写文件
outfile:1,10 w >> outfileAppends lines 1 to 10 to
outfile:r infileInsert the content of
infile:23r infileInsert the content of
infile under line 23
文件浏览器
:Sex but split window vertically:browse eGraphical file explorer:lsList buffers:cd ..Move to parent directory:argsList files:args *.phpOpen file list:grep expression *.phpReturns a list of .php files contening
expressiongfOpen file name under cursor
和 Unix 系统交互
pwd unix command, then returns to Vi!!pwdExecute the
pwd unix command and insert output in file:shTemporary returns to Unix$exitRetourns to Vi
对齐
Tabs/Windows
abc.txt in new window
分屏显示
filename in current window:split filenameSplit the window and open
filenamectrl-w up arrowPuts cursor in top windowctrl-w ctrl-wPuts cursor in next windowctrl-w_Maximize current window verticallyctrl-w|Maximize current window horizontallyctrl-w=Gives the same size to all windows10 ctrl-w+Add 10 lines to current window:vsplit fileSplit window vertically:sview fileSame as
:split in readonly mode:hideClose current window:?nlyClose all windows, excepted current:b 2Open #2 in this window
自动完成
dict as a dictionnaryCtrl+x Ctrl+kComplete with dictionnary
Marks
{a-z}‘ {a-z}Move to position
{a-z}”Move to previous position
缩写
mail as abbreviation of
mail@provider.org
文本缩进
语法高亮
三.命令行模式操作
1.进入插入模式
按“i”:从光标当前位置开始输入文件。
按“I”:在光标所在行的行首插入。
按“a”:从目前光标所在位置的下一个位置开始输入文字。
按“A”:在光标所在行的行末插入。
按“o”:在下面插入一行
按“O”:在上面插入一行。
按“s”:删除光标后的一个字符,然后进入插入模式。
按“S”:删除光标所在的行,然后进入插入模式。
3.移动光标
“h”、“j”、“k”、“l”分别控制光标左、下、上、右移一格。
“w”:光标跳到下个字的开头。
“e”:光标跳到下个字的字尾。
“b”:光标回到上个字的开头。
“nl”:光标移动该行的第n个位置,例如:“5l”表示移动到该行的第5个字符。
“ctrl+b”:屏幕往后移动一页。
“ctrl+f”:屏幕往前移动一页。
“ctrl+u”:屏幕往后移动半页。
“ctrl+d”:屏幕往前移动半页。
—数字“0”:移动到文本的开头。
“G”:移动到文件的最后。
—“$”:移动到光标所在行的行尾。
“^”:移动到光标所在行的行首。
4.删除文字
“x”:每按一次,删除光?所在位置的后面一个字符。
“nx”:例如:“6x”表示删除光标所在位置后面6个字符。
“X”:每按一次,删除光标所在位置的前面一个字符。
“dd”:删除光标所在行。
“ndd”:从光标所在行开始删除n行。例如:“4dd”表示删除从光标所在行开始的4行字符。
5.复制
“yw”:将光标所在之处到字尾的字符复制到缓冲区中。
“nyw”:复制n个字到缓冲区。
“yy”:复制光标所在行到缓冲区。
“nyy”:例如:“6yy”表示复制从光标所在行开始6行字符。
“p”:将缓冲区内的字符写到光标所在位置。
8.更改
“cw”:更改光标所在处的字到字尾处。
“cnw”:例如:“c3w”表示更改3个字。
9.跳至指定的行
“ctrl+g”:列出光标所在行的行号。
“nG”:例如:“15G”,表示移动光标到该文件的第15行行首。
其他:
“ZZ”:存盘退出
“ZQ”:不存盘退出
“r”:替换光标所在处的字符。
“R”:替换光标所到处的字符,直到按下“ESC”键为止。
“u”:撤销上一次操作
四.末行模式操作
在使用末行模式之前,请记住先按“ESC”键确定已经处于命令行模式后,再按冒号“:”即可进入末行模式。
“set nu”:列出行号
“set nonu”:取消列出行号
“set ic”:搜索时忽略大小写
“set noic”:取消在搜索时忽略大小写。
“n”:跳到文件中的某一行,“n”表示一个数字,如输入数字15,再回车就会跳到文本的第15行。
“!cmd”:运行shell命令cmd。
查找字符:
“/关键字”:先按“/”,再输入想查找的字符,如果第一次查找的关键字不是想要的,可?一直按“n”,往后查找一个关键字。
“? 关键字”:先按“?”键,再输入想查找的字符,如果第一次查找的关键字不是想要的,可以一直按“?”,往后查找一个关键字。
替换字符:
“s /SPARCH/replace/g”:把当前光标所处的行中的SEARCH单词替换成REPLACE,并把所有SEARCH高亮显示。
“%s /SPARCH/REPLACE”:把文档中所有SEARCH替换成REPLACE。
“n1,n2 s /SPARCH/replace/g”:n1、n2表示数字,表示从n1行到n2行,把SEARCH替换成REPLACE。
五.命令行内容说明
特别注意,在vi中,“数字”是很有意义的。数字通常表示重复做几次的意思。也有可能表示要去哪里的意思。举例来说,要删除50行,则是用“50dd”。数字加在动作之前。要向下移动20行,使用“20j”或“20↓”即可。
掌握这些命令就很不错了,因为常用到的命令也可能只有一半。通常vi的命令除了上面笔者注明的常用的几个外,其他不用背,可以做一张简单的命令表,当有问题时就可以马上查询。
许多人都有过网络密码被盗的经历,而防范意识不强是造成密码被盗的主要原因之一,有些人使用数字串“”作为密码,还有些人使用密码的英文单词“password”作为密码。实际上,即使对“password”做一些的变动,比如写“p@ssw0rd”,仍然不是安全的密码。
使用长密码
网络安全专家认为,一个安全的密码至少是在12到14个字符以上。14个字符的密码需要猜测811万亿次才能激活成功教程,长度才能保证安全,而不是复杂度。相比之下,8位的密码只需要几个小时就能破。
但是,很少有人会使用12位以上的密码。这可以理解:长密码很难记住,输入也麻烦。但这个问题其实很好解决,照着下面的步骤做,你一定能创建出自己的安全密码。
用句子做密码
“landui”可能会很快被激活成功教程,但是如果改成“I like landui”(我吹萨克斯),可能需要两年的时间来激活成功教程。再加长一点变成“I really like landui”(我每天吹萨克斯),则需要几十亿年的时间来激活成功教程。不懂英语的话,把中文拼音也能起到一样的?果,比如“Ireallylikelandui”。
为了好记?你可以使用电影台词、古诗或者儿歌里的句子做密码。也许你还可以更换其中的一个词。总而言之,句子比随机的一串字符好记得多。
在不同网站上使用同一个密码的不同版本
通常的建议是为你登录的每一个网站创建不同的密码。
从长久来看,在你所登录的网站中,可能有一天会有某个网站的密码数据库被黑客攻破,比如几年前的CSDN密码泄露事件,或者你遭受钓鱼攻击,泄露了某个网站的账户密码。如果你使用同样的邮箱和密码注册所有网站,其他网站的账户密码也就同时泄露了。
小心使用特殊字符
许多人喜欢把“a”换成“@”,把“o”换成“0”,那样,“landui”就变成了“l@ndui”。问题是,黑客知道有人使用了这种方法,会相应地改变激活成功教程方式,激活成功教程“l@ndui”只需不到一个小时。一个著名的例子是,荷兰安全证书提供商NigiNotar员工使用“production/administrator”(产品管理员)作为用户名,使用“Pr0d@dm1n”作为密码,这个密码被一名21岁的伊朗学生猜到,最终导致这家公司破产。
保持“数字卫生”
不要使用你的狗或者猫的名字或者名字变体作为你的密码,然后还在社交网站上晒它们的照片,叫出它们的名字。高级可持续性威胁(ATP)小组会搜遍互联网寻找个人信息,并用于攻击银行账户。避免使用跟家庭成员和宠物名字或者以往住址有关的密码。
使用密码管理软件
这些软件,比如LastPass,提供了浏览器插件,在你第一次输入某个网站的账号密码时,它会帮你将密码保存到其服务器中,这样可以免除你每次登陆都要重新输入账号密码的烦恼。当你输入弱密码时,它还会提醒你更换成强密码。这些软件还能为你生成强密码。
不过,也有一些对这些软件感到不放心。如果软件账号的主密码被盗了呢?这样所有其他网站的账户和密码都泄露了。
把密码写在纸上
如果创建了一个很长的密码,但是担心会忘记,你可以把它写在纸上,并放到家里安全的地方,比如锁在抽屉里。这样要比保存在电脑上安全得多。
错误提示如下:
出现上面Notice: Undefined variable: data in这个问题主要是ecshop 的缓存紊乱导致?。
解决方法
1、 网站根目录下的temp/static_caches/里面的除了index.html文件的所有文件都删除。
2、 删除 temp/caches/下所有文件夹里面的内容。
现象:修改密码时,UCenter通知其它应用的密码为空。
解释:UCenter原始程序在修改密码时,其实并没有对密码进行同步传递,看uc_client源码发现,Discuz! 接收的同步密码也只是随机生成的字符串。可能是为了安全或某种原因!
解决:对UCenter的服务器端(uc_server)程序进行修改,添加密码的同步通知!具体操作如下:
1、UCenter后台更改密码后的通知程序:uc_servercontroladminuser.php,将其中的以下代码:
$_ENV[‘note’]->add(‘updatepw’, ‘username=’.urlencode($username).’&password=’);
修改为:
$_ENV[‘note’]->add(‘updatepw’, ‘username=’.urlencode($username).’&password=’.$orgpassword);
2、UC通知程序:uc_servercontroluser.php,将其中的以下代码:
$_ENV[‘note’]->add(‘updatepw’, ‘username=’.urlencode($username).’&password=’);
修改为:
$_ENV[‘note’]->add(‘updatepw’, ‘username=’.urlencode($username).’&password=’.$newpw);
另外,如果是在应用里修改密码,而应用程序使用独立用户数据库,则需要修改ucenter客户端(uc_client)的相应代码:
打开 uc_clientcontroluser.php 查找
$_ENV[‘note’]->add(‘updatepw’, ‘username=’.urlencode($username).’&password=’);
修改为:
$_ENV[‘note’]->add(‘updatepw’, ‘username=’.urlencode($username).’&password=’.$newpw);
在织梦图集选择本地图片上传的时候,弹出提?框显示302错误!
解决办法:
在 include/userlogin.class.php 文件中的第二行 session_start(); 前加上以下代码:
if (isset($_POST[“PHPSESSID”])) {
session_id($_POST[“PHPSESSID”]);
} else if (isset($_GET[“PHPSESSID”])) {
session_id($_GET[“PHPSESSID”]);
}
刷新网页重新上传即可解决该问题!
在操作过程中,可能会出现 mysql server has gone away 的错误,这是数据库太大,缓存不够或操作超时导致?,可以修改下 mysql 的配置来解决:
1、打开配置文件(这里演示的是军哥的 lnmp 下的配置文件,如果你的路径不是这个,自己找到)
1
vi /etc/my.cnf
2、找到 wait_timeout、interactive_timeout 两个变量,设置值为
1
2
wait_timeout=
interactive_timeout =
如果没有这两个参数,直接添加即可
3、再找到max_allowed_packet,增加这个变量的值,比如 100M (也可以设置自己需要的大小)
1
max_allowed_packet = 100M
max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。
当然,其他参数可以根据自己的需要调整:
4、重启 mysql 服务即可
【?题分析】
APACHE启动成功,但无法接受任何请求,查看ERROR.LOG文件
[warn] pid file /opt/apache/logs/httpd.pid overwritten — Unclean shutdown of previous Apache run?
【解决方法】
方法1:
大概意思是说PID文件一直被一个程序改写,我测试系统上还运行了RESIN,只要停止了就可以了
resin/bin/httpd.sh stop
resin/bin/httpd.sh stop
resin/bin/httpd.sh stop
方法2:
试图删除/usr/local/apache/logs/httpd.pid再重启也不行。
使用ipcs查看系统的信号量,发现是信?量sem已经满了,所以导致startssl无法启动。
据说是如果apache没有正常Stop掉的话,它的信号量是不会自动清除的,导致其一直滞留在内存中
于是,用以下命令清除sem信号量后,apache就可以正常启动了:
for i in `ipcs | grep nobody | awk ‘print $2}’`; do ipcrm -s $i; done
看来,以后我们需要慎用killall -9 httpd,尽量使apache能正常的stop
方法3:
将php相关文件夹路径添加到环境变量path上,即加php;php/ext进path
重启apache,再不行的话重启服务器
Script 命令可以帮助管理员记录用户的操作行为,包括用户查看文件中的哪些具体内容,写入了哪些文件,写了些什么都能看到,比较详细的记录了用户的操作行为。 本文对此进行简要说明。
1.添加日志记录
echo '/usr/bin/script -qaf /root/$USER-$UIDO-`date +%Y%m%d%H%M`.log' >>/root/.bash_profile -q,script已静默的方式运行,用户没有感知,不然会有一行script start的提示。-a,该选项将会让记录附加到文件中,而不会擦除先前的记录。-f,实时更新文件,只要用户退出后,新上的用户会自动又创建一个时间记录日志。
2.重新登录 root 用户
more /etc/fstabexit退出终端
可以查看到用户登录时间及使用的命令,查看的内容都会显示。见下图:
3. 同理,如果有其他一般用户登录,可在其家目录 /home/XXX 中的 .bash_profile 中添加相应的内容,对相应用户操作进行记录。
1. Kangle 官方地址:https://www.landui.com/
2. N 点主机管理系统:http://www.landui.com/
3. 智创 IIS 管理?手:http://www.landui.com/IIsSafeWeb.asp
Windows 下 apache 类主机管理系统:
1. Appserv: http://www.landui.com/en/
2. Phpnow: http://www.landui.com/soft/detail/23493.html
3. Xampp: https://www.landui.com/zh_cn/index.html
Linux 下:
1. Kangle:https://www.landui.com/
2. Wdcp: http://www.landui.com/wdcp/
3. LNMP 一键安装包: https://www.landui.com/
4. Amh (收费): https://www.landui.com/
1.下载Apache HTTP Server 2.2.25
地址:http://www.landui.com/download.cgi#apache22
2.解压压缩包到本地
找到modulesmappers下mod_speling相关文件mod_speling打头的五个文件
上传到到服务器/www/wdlinux/httpd-2.2.22/bin/mappers/ 目录下
3.然后登录ssh执行
cd /www/wdlinux/httpd-2.2.22/bin/mappers/
/www/wdlinux/httpd-2.2.22/bin/apxs -c -i -a mod_speling.c
4.执行完之后修改 httpd.conf文件,路径是 /www/wdlinux/httpd-2.2.22/conf下
打开文件搜索 LoadModule speling_module modules/mod_speling.so 在下方添加 CheckSpelling on
所有步骤操作完成,重启web!
1、 临时添加
ip addr add 10.10.1.1/32 dev lo:1
重启失效
2、永久添加
cd /etc/sysconfig/network-scripts
cp ifcfg-lo ifcfg-lo:1
2、 [root@localhost network-scripts]# cat ifcfg-lo:1
DEVICE=lo:1
IPADDR=10.10.1.1
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback1
3、 [root@localhost network-scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 10.10.1.1/32 brd 10.10.1.1 scope global lo:1
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
4、 [root@localhost network-scripts]# ping -c1 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 56(84) bytes of data.
64 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=0.045 ms
由于经常在centos6和centos7系统之间做切换,觉得centos7的网卡名太长,不太方便,所以想弄的跟6一样的
希望把网卡名改为跟6一样的eth0,eth1,执行以下操作
1.#cd /etc/sysconfig
2.在最长的那一行添加下面的句子
#vim grub
net.ifnames=0 biosdevname=0
3.#grub2-mkconfig -o /boot/grub2/grub.cfg
4.重命名原来的网卡名字
#cd /etc/sysconfig/network-scripts
#mv ifcfg-enoXXXXXXXX ifcfg-eth0
5.修改ifcfg-eth0里边的NAME,DEVICE的名字都为eth0
NAME=eth0
DEVICE=eth0
6.reboot,并查看发现已经成我们想要的eth0
trl+c,ctrl+d,ctrl+z在linux中意义和区别
ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样.
ctrl+c是强制中断程序的执行。
ctrl+z的是将任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/bg操作继续前台或后台的任务,fg命令重新启动前台被中断的任务,bg命令把被中断的任务放在后台执行.
例如:当你vi一个文件是,如果需要用shell执行别的操作,但是你又不打算关闭vi,因为你得存盘推出,你可以简单的按下ctrl+z,shell会将vi进程挂起~,当你结束了那个shell操作之后,你可以用fg命令继续vi你的文件。
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。
有时候可能会由于我们使用的VPS系统内存比较小,在运行某些程序时候内存不足性能降低。这里我们可以针对为Linux VPS主机创建和增加SWAP交换空间,提供程序运行的资源足够资源。
下面将给硬盘的空间增加1GB swap
上图是我在增加SWAP之前的内存情况,目前SWAP已经有1023MB。下面开始,操作如何增加SWAP以及最后的效果。
1.通过dd命令创建swap分区
dd if=/dev/zero of=/home/swap bs=1024 count=
这里我创建1GB的空间作为swap,让后面的COUNT数据是前面的bs*1024
2.格式化swap分区
mkswap /home/swap
3.转换成swap分区
swapon /home/swap
4.创建自动挂载
编辑/etc/fstab文件,在文件最后加上”/home/swap swap swap default 0 0 “脚本。
然后我们重启系统,再free -m看看资源情况,可以看出这个图片和上图的对比,增加了1024MB的内存。如果需要关闭swap分区可以使用”swapoff /home/swap”命令
错误提示:
FILE: D:web inkphpwebAdminThinkPHPLibraryThinkDbDriver.class.php LINE: 109
解决方法:
修改php.ini文件
extension=php_pdo_mysql.dll 删除前面的冒号
Linux修改php.ini文件
extension=pdo_mysql.so 删除前面的冒号
将前面的分号去掉,问题得到解决
解答:“3.2.3数据库类和驱动采用PDO重写了,因此无论是什么数据库都是基于PDO实现的”
以下命令均在/home目录下操作
cd /home #进入/home目录
1、把/home目录下面的mydata目录压缩为mydata.zip
zip -r mydata.zip mydata #压缩mydata目录
2、把/home目录下面的mydata.zip解压到mydatabak目录里面
unzip mydata.zip -d mydatabak
3、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zip
zip -r abc123.zip abc 123.txt
4、把/home目录下面的wwwroot.zip直接解压到/home目录里面
unzip wwwroot.zip
5、把/home目录下面的abc12.zip、abc23.zip、abc34.zip同时解压到/home目录里面
unzip abc*.zip
6、查看把/home目录下面的wwwroot.zip里面的内容
unzip -v wwwroot.zip
7、验证/home目录下面的wwwroot.zip是否完整
unzip -t wwwroot.zip
8、把/home目录下面wwwroot.zip里面的所有文件解压到第一级目录
unzip -j wwwroot.zip
1.下载以及安装virt-what脚本
#yum install gcc gcc-c++ autoconf automake
#wget http://www.landui.com/tools/virt-what-1.11.tar.gz
#tar zxf virt-what-1.11.tar.gz
#cd virt-what-1.11
#https://www.landui.com/configure #设置
#make && make install #编译安装
2.检测系统架构技术
#virt-what
5种方法解除电脑开机密码
第一种:
在开机时,按下F8进入”带命令提示符的安全”模式
输入”NET USER+用户名+/ADD”可把某用户的密码强行设置为”″
第二种:
1.在计算机启动时按〔F8〕及选〔Safe Mode With Command Prompt〕
2.选〔Administrator〕?便会跳出〔Command Prompt〕的窗口
3.用〔Net〕的命令增加一个用户,例:增加一个用户名为alanhkg888,命令语法如下:
net user alanhkg888/add 4.将新增用户提升至Administrator的权力,例:提升刚才增加用户alanhkg888的权力,命令语法如下
net localgroup administrators alanhkg888/add 5.完成上列步骤后重新启动计算机,在启动画面上便增加了一个用户alanhkg888了,选alanhkg888进入
6.登入后在〔控制台〕→〔使用者账户〕→选忘记密码的用户,然后选〔移除密码〕后〔等出〕
7.在登入画面中选原来的用户便可不需密码情况下等入(因已移除了)
8.删除刚才新增的用户,在〔控制台〕→〔使用者账户〕→选〔alanhkg888〕,然后选〔移除账户〕便可
第三种:
1、重新启动Windows,在启动画面出现后的瞬间,按F8,选择”带命令行的安全模式”运行。
2、运行过程停止时,系统列出了超级用户administrator和本地用户owner的选择菜单,鼠标administrator,进入命令行模式。
3、键入命令:”net user owner /add”,强制性将OWNER用户的口令更改为”″。若想在此添加某一用户(如:用户名为abcdef,口令为) 的话,请键入”net user abcdef /add”,添加后可用”net localgroup administrators abcdef/add”命令将用户提升为系统管理组administrators用户,具有超级权限。
4.DOS下删windowssystem32config里面的SAM档就可以了
5.开机后按键盘的Delete键进入BIOS界面。找到User Password选项,其默认为关闭状态。启动并输入用户密码(1~8位,英文或者数字)。计算机提示请再输入一遍以确认密码无误,保存退出后重新启动机器,这时就会在开机时出现密码菜单
第四种:
如果是FAT32,进入DOS,删除c:winntsystem32configsam*.*就可以了。登陆只要输入administrator不输密码即可。然后创建一个新的。要是NTFS则无效
另外如果你的系统没有加过微软的输入法补丁的话也可以利用输入法的漏洞去做一个管理员权限账号,
具体方法如下:
开机后,Win自启动,出现登录窗口,显示用户名,并要求输入密码(当然这时你不会有密码)。
这时请将输入焦点置于用户名一项,用Ctrl+Shift切换输入法(随便选上一种,只要能出现输入法工具条的就行)。在出现的输入法提示工具条上单击右键,选择帮助,会弹出一个帮助窗口。接下来你需要在这个窗口里找到一个(绿色带下划线)超级链接,并用SHIFT+鼠标左键单击,打开它会弹出一个IE窗口,请在窗口地址栏里输入c:,到这步你应该很清楚怎么做了。只要标准按键的”向上?,会发现你可以进入”控制面板”了,进入后你可以直奔”用户和密码”接下发生的事只有你自己知道了。
第五种:
我们知道在安装Windows过程中,首先是以”administrator”默认登录,然后会要求创建一个新账户,以便进入Windows时使用此新建账户登录,而且在Windows的登录接口中也只会出现创建的这个用户账号,不会出现”administrator”,但实际上该”administrator”账号还是存在的,并且密码为空。
1.tail格式
tail[必要参数][选择参数][文件]
2.tail参数
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示行数
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.
-q, –quiet, –silent 从不输出给出文件名的首部
-s, –sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
3.常用tail命令实例
1、显示文件末尾5行内容
tail -n 5 landui.com.log
2、循环查看文件内容
tail -f landui.com.log
3、从第10行开始显示文件内容
tail -n +10 landui.com.log
下面蓝队网络网络为大家演示一下使用微软备份服务,备份我们网站根目录WWWROOT
双击进入
备份计划
进入向导
第一个是备份整个服务器,这里我们选择自定义,选择E盘的WWWROOT文件夹
添加项目
下一步
我这里选择卷,一般选择单独的第一个,我这里仅作演示用
不知道为什么选择不了我的第二块盘,这里我选择C盘,实际备份建议大家不要选择C盘
创建成功了!
硬盘分区类型
硬盘有4种分区形式,分别是主分区、扩展分区、逻辑分区和活动分区。下面分别对它们进行介绍。
-
主分区
主分区是用于安装操作系统的分区,其中包含操作系统启动时所必需的文件和数据,系统启动时必须通过?才能启动。要在硬盘上安装操作系统,该硬盘上至少要有一个主分区,并且设为活动分区来引导启动系统。一个硬盘最多只能划分4个主分区。
-
扩展分区
扩展分区是用户在创建4个以上的分区时使用的分区类型,扩展分区是不能直接用来存储数据的,而只是用于划分逻辑分区。扩展分区下可以包含多个逻辑分区,可以为其逻辑分区进行高级格式化,并为其分配驱动器号。例如,当用户想为硬盘创建5个分区时,如果都将其创建为主分?,系统只能认出4个,这不能满足我们的需求。此时,就可以创建3个主分区,再创建一个扩展分区,然后在扩展分区下创建2个逻辑分区。
-
逻辑分区
逻辑分区是从扩展分区划分出来的,主要用于存储数据。在扩展分区中最多可以创建23个逻辑分区,各逻辑分区可以获得唯一的由D到Z的盘符。
-
活动分区
活动分区是用于加载系统启动信息的分区。主分区需要激活为活动分区后,才能正常地启动操作系统。如果硬盘中没有一个主分区被设置为活动分区,则该硬盘将无法正常启动。
硬盘分区格式
硬盘分区格式也就是文件系统格式。文件系统格式是操作系统用于明确磁盘或分区上文件的方法和数据结构,不同的分区格式采用不同的文件管理机制来存储和读取文件数据,而不同的操作系统则需要不同的文件系统格式的支持。
目前常用的分区格式主要有3种,即FAT16格式、FAT32格式和NTFS格式,下面分别对它们进行介绍。
-
FAT16格式
FAT16格式是MS-DOS和早期的Windows 95操作系统中使用的磁盘分区格式,它采用16位的文件分配表,也称为FAT格式。FAT16对现在的操作系统已经不再适用。
-
FAT32格式
FAT32格式采用32位的文件分配表,对磁盘的管理能力较强,支持Windows XP和其之前的部分Windows 操作系统。
-
NTFS格式
NTFS是一种特别为磁盘配额、文件加密和网络应用等管理安全特性而设计的硬盘分区格式。其优点是安全性和稳定性方面非常好,在使用过程中不易产生文件碎片,并能对用户的操作进行记录,通过对用户权限进行非常严格的限制,使每个用户只能按照系统赋予的权限进行操作,充分保护了系统和数据的安全,如果要安装Windows 7或Windows 8必须采用NTFS格式。
有的时候我们需要升级硬盘,升级完之后,我们还需要到 计算机管理-》磁盘管理 进行磁盘分?的扩展,具体操作如下
我们发现黑色区域就是我们刚才升级的大小(这个例子仅仅作为演示),这个时候我们右键单机我们需要升级的分区,扩展卷,就可以把刚才升级的大小分配到这个分区上。
成功扩展了!
清除error.log、access.log并限制Apache日志文件大小的方法
今天有台linux服务器Mysql突然起不来了,检查报错发现是磁盘满了,可用空间为0KB,进去后发现Apache的错误日志error.log非常的大,造成D盘被爆满。
在网上搜了下相应的资料,并按照如下步骤做了一遍,网站恢复正常
第一步:停止Apache服务的所有进程,删除 Apache2/logs/目录下的 error.log、access.log文件
第二步:打开 Apache 的 httpd.conf配置文件并找到下面两条配置
ErrorLog logs/error.log
CustomLog logs/access.log common
直接注释掉,换成下面的配置文件。
# 限制错误日志文件为 1M
ErrorLog “|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 1M”
# 每天生成一个错误日志文件
#ErrorLog “|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 86400″
# 限制访问日志文件为 1M
CustomLog “|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 1M” common
# 每天生成一个访问日志文件
#CustomLog “|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400″ common
系统
# uname -a # 查看内核/操作系?/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量
资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载
磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况
网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息
进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态
用户
# w # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务
服务
# chkconfig –list # 列出所有系统服务
# chkconfig –list | grep on # 列出所有启动的系统服务
程序
# rpm -qa # 查看所有安装的软件包
通常我们在使用的nginx+apache,启动nginx报28:no space left on device的错误。
这个提示一般是我们的系统使用空间没有了。
1、使用命令:df -lk
发现果然有个磁盘已满
2、使用命令:du –max-depth=1 -h
查找大文件。进行清除,多少情况下可能是由于apache日志导致空间使用满了
3、进入apache下的logs目录
使用命令:ls -lht
查看日志文件中占空间大的文件删了。
4重启nginx后可以正常
SSH用非root用户登录报错,bash fork retry Resource temporarily unavailable。
引?该问题的原因可能是/etc/security/limits.d/90-nproc.conf文件中nproc达到了上限,或者上述配置文件只针对特定用户放开了限制,而其它用户依然还有限制。
这里的90-nproc.conf,可能会因机器而已。
解决方法是修改nproc上限或者修改对应的用户账户,然后重启系统生效即可。
注:此文件是CentOS 6版本后才后该文件,在CentOS 5.10中没有
执行步骤如下:
1.cp-a /etc/security/limits.d/90-nproc.conf /etc/security/limits.d/90-nproc.conf.bak
注:此操作是备份文件,避免操作失误,可以用来还原。
2.vim/etc/security/limits.d/90-nproc.conf
#Default limit for number of user’s processes to prevent
#accidental fork bombs.
#See rhbz # for reasoning.
* soft nproc 1024
在此处将1024修改为更大的数值,根据需求设置即可,例如设置为:1500
#Default limit for number of user’s processes to prevent
#accidental fork bombs.
#See rhbz # for reasoning.
* soft nproc 1500
如果是针对特定用户有限制,则修改对应的行内容即可,例如将:
#Default limit for number of user’s processes to prevent
#accidental fork bombs.
#See rhbz # for reasoning.
mayun soft nproc 1024
* soft nproc 1500
修改为:
#Default limit for number of user’s processes to prevent
#accidental fork bombs.
#See rhbz # for reasoning.
mayun soft nproc 2000
* soft nproc 1500
3.init 6
注:重启系统
另外,如果这样没有作用,那就可以kill这个用户的一些进程试试,如果可以,就是这个用户的某个进程有循环,一直在占用一些资源。
1.执行cat /etc/sysconfig/network-scripts/ifcfg-eth0查看网卡配置是否正确
2. Ping 182.247.238.15是通的
Ping 114.114.114.114也是通的
这种情况就查看resolv.conf文件是否存在或者里面配置信息是否存在,小编执行cat /etc/resolv.conf查看resolv.conf文件是空白,这是由于安装centos7时配置网络信息出问题了
解决方法:
1.#vi /etc/resolv.conf
输入:
dns1=114.114.114.114
dns2=8.8.8.8
nameserver x.x.x.x #本地服务器IP
nameserver 114.114.114.114
2.#service network restart #重启网卡服务
开启调试模式很简单,只需要在入口文件中增加一行常量定义代码:
<?php
// 开启调试模式 define(‘APP_DEBUG’, true);
// 定义应用目录 define(‘APP_PATH’, ‘https://www.landui.com/Application/’);
// 加载框架入口文件 require ‘https://www.landui.com/ThinkPHP/ThinkPHP.php’;
在完成开发阶段部署到生产环境后,只需要关闭调试模式或者删除调试模式定义代码即可切换到部署模式。
<?php
// 关闭调试模式 define(‘APP_DEBUG’, false);
// 定义应用目录 define(‘APP_PATH’, ‘https://www.landui.com/Application/’);
// 加载框架入口文件 require ‘https://www.landui.com/ThinkPHP/ThinkPHP.php’;
通常情况下是在index.php的文件中。路径一般是默认网站站点路径中的/thinkphp/index.php
1、首先找到apache的配置文件,httpd.conf,用编辑工具打开,或者文本形式打开。
2、检查开启rewrite_module模块(将前面的#号去掉)。
3、修改Directory的AllowOverride为all,注意配置文件中有很多Directory,不要该错了,否则不会生效的,Directory一定是你apache服务的根目?。下图可做参考。
4、在你的根目录下面编写.htaccess文件,文件内容:ErrorDocument 404 /404.html
5、重启apache服务,接下来访问下吧,试试是否设置成功。
处于各种原因我们可能需要对某个NTFS文件夹进行权限扫描,下面蓝队网络为大家介绍一款工具:
AccessEnum 下载地址 https://www.landui.com/en-us/sysinternals/bb.aspx
下面介绍一下使用方法:
1.下载解压
2.双击exe运行
注: 1 选择路径 2打开注册表 3 扫描 4离开 5将扫描结果保存到文件
3.测试一下
有时,我们可能需要提供一个公共的或者给自己团队使用的下载站点,我们是需要使用windows 的列出目录功?即可轻松实现。
下面,蓝队网络为大家实际操作一下:
1.删除其他用户账户,保留 SYSTEM和Administrator,新建一个运行账户,添加匿名运行账户权限
打开为
说明匿名账户添加成功了
2.在iis上开启目录浏览
再试一次,发现可以了。
当抛出异常后通常会显示具体的错误信息,如果不想让用户看到具体的?误信息,可以设置关闭错误信息的显示并设置统一的错误提示信息,例如:
‘SHOW_ERROR_MSG’ =>false,
‘ERROR_MESSAGE’ =>’发生错误!’
设置之后,所有的异常页面只会显示“发生错误!”这样的提示信息,但是日志文件中仍然可以查看具体的错误信息。新版如果关闭调试模式的话,为了安全起见,默认就是关闭异常信息提示。
另外一种方式是配置ERROR_PAGE参数,把所有异常和错误都指向一个统一页面,从而避免让用户看到异常信息,通常在部署模式下面使用。ERROR_PAGE参数必须是一个完整的URL地址,例如:
‘ERROR_PAGE’ =>’/Public/error.html’
如果不在当前域名,还可以指定域名:
‘ERROR_PAGE’ =>’http://www.landui.com/Public/error.html’
注意ERROR_PAGE所指向的页面不能再使用异常的模板变量了。
首先端口分tcp、udp之分,所以同一个端口号还有tcp协议和udp协议之分。
我们一般最常见的工具是telnet,但是telnet使用的是tcp协议,换句话说telnet只能检测tcp的这个端口打开了没。
方法很简单,假设我们要看192.192.193.211这个IP的tcp 22端口是否打开,则运行telnet 192.192.193.211 22 来查看,如果出现下列信息,则表示该端口已打开。
除了telnet以外,还有一个命令nc也可?看端口是否打开。同样查看tcp 22端口是否打开,可以运行nc -z 192.192.193.211 22,打开着就会出现下列信息:
那如果想要查看udp 22 端口是否打开,用什么可以做到呢?nc 也可以噢~ 运行 nc –uz 192.192.193.211 22, 打开这就会出现这些信息:
nc 还可以一次性查看多了端口,例如
将开放的端口写入iptables中,假如我们要开发8080 端口在终端中输入命令:
/sbin/iptables -I INPUT -p tcp –dport 8080 -j ACCEPT
保存上一步的修改内容,输入命令:
/etc/init.d/iptables save
重启防火墙,使修改生效,输入命令:
service iptables restart
查看端口状态,输入命令:
/etc/init.d/iptables status
安装好wdcp面板,通过8080端口(http://www.landui.com:8080)登录后,是没有站点信息的,如下图所示。
接下来我们创建整站来创建一个新?网站,在域名框里填写你网站的域名,注意不要加www,如果需要用www.landui.com的形式访问网站,可以把“添加www主机名”那个选项打上勾。
其他选项可以默认不填写,然后下拉滚动条填写ftp和mysql数据库信息,填写完后保存。
到这一步,站点就已经创建成功了,我们左侧导航中的站点列表就可以看到刚才创建的这个网站。
创建站点成功,然后通过ftp登录到网站根目录,注意,登录到站点的目录中会看到一个名字叫“public_html”的目录,要进入到这个目录里才是网站的根目录,可以把里面默认的那些文件或者文件夹都删除,然后上传自己的程序代码,上传好后就可以进行安装了。
Linux 系统中常常会因为设置了不正确的文件或目录权限导致出现系统安全问题。因此在日常的系统维护中,应该能做到及时发现不正确的文件权限设置并能及时修正,防患于未然,这里介绍几种用安全加固的方法:
1. 查找系统中任何用户都拥有写入权限的文件或者目录,并保存在文件中用于检查。
find / - type f –perm -2 -o –perm -20 > wmodfiles.txt
find / - type d –perm -2 -o –perm -20 > wmoddir.txt
2. 查找系统中没有属主的文件
find / -nouser –o –nogroup > orphan.txt
这种无属主的文件对于系统的安全也能造成一定的威胁,有时候也会成为入侵者的工具,建议发现之后,要么修改其属主信息,要么删除,?免后患。
3. 查找系统中设置了 S 位的程序
find / -type f -perm -4000 –o –perm -2000 > smod.txt
含有 S 位权限的程序对系统的威胁很大,可以把某些没必要使用 S 位权限的应用程序去掉,以防用户权限的滥用。
4.利用 chatter 命令来锁定系统的重要文件。
指令使用格式:chatter [-RV] [-v version] [mode] files…
主要参数说明:
-
-R:递归的修改一个目录下的所有文件以及相应的子目录。
-
-V:显示修改内容,并在屏幕上打印输出。
-
Mode:部分是用来设置或修改文件属性的,一般常用的参数是:
-
+:在原属性上追加属性。
-
-:在原属性上移除属性。
-
a: 在设定该参数后只能向文件中添加数据而不能删除文件,常用于服务器的系统日志安全(只有root用户才能设定该属性)。
-
i:在设定该参数后该文件不能被写入数据或者被修改,删除,重命名,设定连接等。
在基本了解该命令的用法后,可以对系统中的常见文件设定安全属性了,示例:
另外,用户也可以对常见目录,例如/bin、/boot、/lib等目录加上 i 属性,对系统常用的日志文件例如 /var/log/messages 和 /var/log/wtmp 也可以加上 a 属性。
虽然通过对重要文件进行加锁的方式能让服务器的安全性提高,但是在运维管理上也会出现一些不方便,例如修改密码时因为 /etc/shadow 文件有 i 属性,会导致密码修改失败。同时对日志文件加入 a 属性,可能会使得日志轮换功能 logrotate 的失败?另外,在软件的安装和升级时可能需要去掉有关目录和文件的 i 属性和 a 属性。
所以,建议用户使用 chattr 命令锁定系统文件时,必须要结合服务器的应用环境来决定是否应用 a 属性和 i 属性。
在Linux系统中,至少有两个目录保存着系统的临时文件,一个就是 /tmp,另外一个是 /var/tmp。这两个目录有一个共同点就是所有用户在该目录下拥有可读写,可执行的权限,参考截图:
因为两个目录的权限的问题,攻击者可以把病毒或者木马文件放到这些临时目录下,用于信息的收集或者伪装运行系统的程序而实际上运行自己的程序。但是如果去修改临时目录的读写权限,则会影响系统上应用程序的正常运行。为了解决这个问题,则必须对这两个目录做特殊的处理。
/tmp 是一个独立的磁盘分区
这种情况下的处理最简单,直接修改 /etc/fstab 文件中 tmp 分区的挂载属性,加上 nosuid(不允许任何suid程序),noexec(在这个分区不能执行任何脚本等程序),nodev(不存在设备文件) 参数。
修改后的挂载属性应该和截图类似:
在挂载属性调整完毕后重新挂载/tmp分区,确保设置生效。
对于 /var/tmp 目录来说,如果有自己的独立分区的话就参考上述修改就可以,但如果只是 /var 目录下的一个子目录,则把目录下的所有数据移动到 /tmp 下,然后做一个软连接指向 /tmp 就可以了,具体操作为:
mv /var/tmp/* /tmp ln -s /tmp /var/tmp
/tmp只是根目录下的一个子目录
这种情况的配置要麻烦一点,可以通过创建一个 loopback 文件系统(拿文件模拟为块设备),然后通过 loopback 特性挂载该文件系统到 /tmp 下,在挂载时指定前文的安全设置就可以了,操作实例如下:
dd if=/dev/zero of=/dev/testfs bs=1M count=1000 (这里生成的文件?小是1G,如果需要更改大小,修改count后面的值就可以了) mke2fs -t ext4 /dev/testfs (格式化文件系统) cp -a /tmp /tmp.bak (把之前存在于/tmp下的文件拷贝出来,以免再后面执行挂载的时候覆盖掉之前的文件) mount -o loop,noexec,nosuid,rw /dev/testfs /tmp(挂载到tmp目录下) chmod 1777 /tmp mv -f /tmp.bak/* /tmp rm -rf /tmp.bakecho "/dev/testfs /tmp ext4 loop,nosuid,noexec,rw 0 0">>/etc/fstab(写入配置文件,下次开机自动挂载)
最后,测试一下挂载设置之后是否有效?
新建一个test.sh文件,具有执行权限,实验如截图:
从截图可以看到虽然具有执行权限,但是在 /tmp 下面已经无法执行任何文件了.
默认情况下安装的kangle是5.2版本的,在kangle的后台可以进行查看的。
如果需要其他版本只需要执行下面命令进行下载升级就会自动添加相应的版本。例如本人测试的php5.4
命令如下:
Kangle EasyPanel php5.2.17 for linux版(集成zend和ioncube)
wget https://www.landui.com//kangle/master/php/5.2/5217/php5217.sh -O php5217.sh;sh php5217.sh
php.ini路径为 /vhs/kangle/ext/tpl_php5217/php-templete.ini
Kangle EasyPanel php5.4.43 for linux版(集成zend和ioncube)
wget https://www.landui.com//kangle/master/php/5.4/5443/php5443.sh -O php5443.sh;sh php5443.sh
php.ini路径为 /vhs/kangle/ext/tpl_php5443/php-templete.ini
Kangle EasyPanel php5.5.27 for linux版(集成Zend OPcache和ioncube)
wget https://www.landui.com//kangle/master/php/5.5/5527/php5527.sh -O php5527.sh;sh php5527.sh
php.ini路径为 /vhs/kangle/ext/tpl_php5527/php-templete.ini
Kangle EasyPanel php5.6.11 for linux版(集成Zend OPcache和ioncube)
wget https://www.landui.com//kangle/master/php/5.6/5611/php5611.sh -O php5611.sh;sh php5611.sh
php.ini路径为 /vhs/kangle/ext/tpl_php5611/php-templete.ini
Kangle EasyPanel php7.0.0 for linux版(集成Zend OPcache和ioncube)
wget https://www.landui.com//kangle/master/php/7.0/700/php700.sh -O php700.sh;sh php700.sh
php.ini路径为 /vhs/kangle/ext/tpl_php700/php-templete.ini
以上脚本32位、64位都支持。
本脚本为官方脚本,集成了kangle web服务器和mysql,仅支持centos 5和centos 6。
执行下面的命令即可,安装程序将自动安装或者升级。
yum -y install wget;wget http://www.landui.com/easypanel/ep.sh -O ep.sh;sh ep.sh
运行上面的安装shell,会自动安装kangle、easypanel、proftpd、mysql。
安装完后打开http://www.landui.com:3312/admin/登录才能完成最后的安装。
注:初始安装登陆帐号: admin 密码: kangle
注:centos系统下easypanel集成的php?认装的是php53,语言模块里显示的php52其实是php53版本;
操作步骤
一、编辑/etc/目录下的my.cnf文件
#vi /etc/my.cnf
二、在 [mysqld] 项下面加如下代码
bind-address = 127.0.0.1
然后保存即可,这样mysql只能本机链接了!
phpMyAdmin错误-无法在发生错误时创建会话
当登录 phpMyAdmin 出现错误提示“无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装.”,原因是退出phpMyAdmin的时候,没有点“退出”而退出,而是直接叉掉浏览器窗口,当再次登录phpMyAdmin的时候就会出现这个错误.
如果服务器是用的wdcp管理软件的话,直接SSH登录服务器,进入:
/www/wdlinux/tmp
把里面的sess开头的文件全部删除,如果是其他系统就进入:PHP安装目录/tmp 删除sess开头的文件.
Magento 启用 Memcached 缓存方法比较简单了因为Magento自带了这个缓存了只需要简单的配置一?xml文档就可以了,具体的我们来看Magento 启用 Memcached 缓存的设置方法例子吧。
原生支持使用 Memcached 缓存,但是需要在配置文件中进行设置。
先不废话,上代码(app/etc/local.xml):
<global>
…
<cache>
<auto_refresh_fast_cache>true</auto_refresh_fast_cache>
<backend>memcached</backend>
<backend_options>
<servers>
<server>
<host>localhost</host>
<port>11211</port>
<persistent>true</persistent>
<weight>1</weight>
<timeout>1</timeout>
<retry_interval>15</retry_interval>
</server>
</servers>
</backend_options>
</cache>
…
</global>
Memcached 最吸引人的地方主要在于它的分布式,可以实现均衡负载,缓解瞬时访问量大的问题。既然是分布式,那么当然可以使用多个服务器,其中 servers 节点下边就可以添加多个 server 节点,以实现多服务器的配置。
如果在设置 Memcached 之前在后台启用过缓存,那么有可能在开启 Memcached 后访问站点会出现错误,这是默认的缓存格式跟 Memcached 不一样导致的。一般来说只需要把 var/cache 目录下的文件清空就可以解决这个问题。
虽然 Memcached 可以一定程度实现提高运行?度(因为它把缓存暂存到内存中),但它的主要功能还是分布式负载均衡。如果站点瞬时访问量不大,而且使用固态硬盘的话就没有必要使用 memcached 了。
error_reporting的用法有很多的,有时候调试的时候,有些文件不能提示详细错误信息?直接就是500错误,或者什么也没显示,
这个时候我们想开启详细错误但是不影响其它站点,可以尝试下面的方法
直接在运行的文件头部加上下面这段代码
<?php
ini_set(‘display_errors’, true);
error_reporting(E_ALL);
?>
下面蓝队网络就云服务器 Linux 常见安全检查方法进行概要说明:
一、检查系统密码文件,查看文件修改日期
# ls -l /etc/passwd
二、查看 passwd 文件中有哪些特权用户
# awk -F: '$3= =0 {print $1}' /etc/passwd
三、查看系统里有没有空口令帐户
# awk -F: 'length($2)= =0 {print $1}' /etc/shadow
四、检查系统守护进程
# cat /etc/inetd.conf | grep -v "^#"
五、检查网络连接和监听端口
# netstat –an# netstat –rn# ifconfig –a
六、查看正常情况下登录到本机的所有用户的历史记录
# last
七、检查系统中的 core 文件
# find / -name core -exec ls -l {} ;
八、检查系统文件完整性
# rpm –qf /bin/ls# rpm -qf /bin/login# md5sum –b 文件名# md5sum –t 文件名
九、查找是否有后门
# cat /etc/crontab# ls /var/spool/cron/# cat /etc/rc.d/rc.local# ls /etc/rc.d# ls /etc/rc3.d# find / -type f -perm 4000
修改云服务器 Linux 默认管理员 root 的用户名可以提高系统的安全性。蓝队网络对此进行简要说明。
以 CentOS 为例,登录后修改 /etc/passwd 与 /etc/shadow ,将第一行开始的 root 改为新的用户名(比如 admin),修改之后通过 wq! 保存。
修改并保存后,重启服务器后即可生效,可以看下文件的权限,可以看到所属帐号一栏变为 admin 了,如下:
注:
在Linux中默认的最高管理权限用户是 root,uid 为 0。在系统中只识别 uid,因此只要 uid 为 0,系统就视为最高管理用户。但是对于应用程序可能会存在一定的问题,有些软件默认使用的是 root 用户,所以在对软件应用的了解有限的情况下,不推荐对 root 进行用户名称调整。
Linux下libiconv库的安装和使用:
1.编译安装libiconv库
包的下载页面http://www.landui.com/software/libiconv/
http://www.landui.com/pub/gnu/libiconv/libiconv-1.14.tar.gz 下载包
$ https://www.landui.com/configure –prefix=/usr/local
$ make
$ make install
2.在/usr/local/lib/目录下拷备需要的库文件libcharset.so.1, libiconv.so.2。
创建一个文件链接到Libiconv库
ln -s /usr/local/lib/libiconv.so /usr/lib
还有
ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
目前最新版的WDCP的apache版本是2.2.22。所以如果我们的apache出错导致需要重新安装我们可以用到下面这个脚本进行重新安装
#wget http://www.landui.com/in/http2222_ssl.sh
#sh http2222_ssl.sh
出错如下:
DedeCMS Error Warning!
Technical Support: http://www.landui.com
error page:/makehtml_list_action.php?gotype=&uppage=0&maxpagesize=50&typeid=0&pageno=25&
error infos:Dedecms错误警告:连接数据库失败,可能数据库密码不对或数据库服务器出错!
本以为数据库连接数问题,但修改了也不行。
最终经查资料说dedecms自由列表最大生成页数的问题,所以解决方法如下:
Dedecms自由列表只能生成50页的限制如何突破。
首先修改/dede/makehtml_freelist_action.php?的
31行:if(empty($maxpagesize)) $maxpagesize = 50;
改成:if(empty($maxpagesize)) $maxpagesize = 999;
说明 $maxpagesize = 这个后面的数字是你所要生成的最大限制,可以自行调整,合适就可以。
我做了一个统一的出错提示函数,在函数执行里面,先处理出错的地址写入cookie以方便用户登陆以后可以直接跳转到要执行的这个页面,可是发现在服务器上测试时,竟然提示本地没有出现的错误: Warning: Cannot modify header information – headers already sent by….
这样的语句,很显然,造成这个原因是因为setcookie造成的,查了一下网上,有如下的解释: cookie本身在使用上有一些限制,例如:
1.呼叫setcookie的敘述必須放在<html>标签之前
2.呼叫setcookie之前,不可使用echo
3.直到網頁被重新載入後,cookie才會在程式中出現
4.setcookie函数必須在任何資料輸出至浏览器前,就先送出
5.……
基於上面這些限制,所以執行setcookie()函数时,常會碰到”Undefined index”、”Cannot modify header information – headers already sent by”…等問題,解決”Cannot modify header information – headers already sent by”这个錯誤的方法是在产生cookie前,先延缓資料输出至浏览器,因此,您可以在程式的最前方加上ob_start();这个函數。这样就可以解决 了。 如果要加上ob_start()的话,不大可行,程序都写完了,才来改这个似乎有点郁闷.. 发现提示这个错误的时候,我就在想我本地怎么没提示这个问题呢,还以为是PHP.ini配置不一样,想想又不对,都是差不多的..
于是看看后面跟的那句”output started at….”意思是在setcookie之前已经在另一处有输出了,于是找到output started at后面跟的那个文件,看到第一行是空白的,然后才是<?php 这样开始,难道会是这一行的问题吗??我本地也有这一行呢,去掉,刷新再试,呵呵,果然出在这里,不再提示warning了
解决完毕!
解决方法二:
查找网上解决此问题的方法多是一样的,不过今天又遇到了这样的问题。试过之后发现可行:
在C盘的WINDOWS中找到php.ini 这个配置文件,然后查找一项:output_buffering将其值由原来的off改为on,重新启动Apache就ok了。
这是一个十分常用的命令,可以让你实时了解到云主机当前的状态,例如:常见的80连接数量,以及按一些排序,来检查是否被攻击?查看time_wait和syn连接数量等等。
1.查看所有80端口的连接数
netstat -nat|grep -i “80”|wc -l
2.对连接的IP按连接数量进行排序
netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
3.查看TCP连接状态
netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn
netstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}’
netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,” “,state[key]}’
netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,” “,arr[k]}’
netstat -n |awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn
netstat -ant | awk ‘{print $NF}’ | grep -v ‘[a-z]’ | sort | uniq -c
4.查看80端口连接数最多的20个IP
netstat -anlp|grep 80|grep tcp|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -n20
netstat -ant |awk ‘/:80/{split($5,ip,”:”);++A[ip[1]]}END{for(i in A) print A,i}’ |sort -rn|head -n20
5.用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4}’ | sort | uniq -c | sort -nr |head -20
6.查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20
7.找查较多的SYN连接
netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more
打开httpd.conf ,来看一个目录配置:
<Directory “D:/WAMP/WWW”>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
只需要将上面红色代码中的 Indexes 去掉,就可以禁止Apache 显示该目录结构。用户就不会看到该目录下的文件和子目录列表了。
Indexes 的作用就是当该目录下没有 index.html 文件时,就显示目录结构。
现改为如下:
<Directory “D:/WAMP/WWW”>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
另外也可以在 Indexes 前加一个减号 “-”,同样可以禁止Apache显示目录结构。
在Indexes前加 “+” 代表允许目录浏览;加 “-” 代表禁止目录浏览。修改如下:
<Directory “D:/WAMP/WWW”>
Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
打开apache下的httpd.conf文件;
找到DirectoryIndex index.htm
在index.html后面添加即可,如:
DirectoryIndex index.htm index.php default.php
设置完毕重启Apache?务即可
首先Appserv是一个集成了php,apache,mysql的建站软件。所以它的站点建立是遵行了apache的模式。
在默认安装情况下是只有一个站点的,需要我们手动建立才会有。
方法如下:
Appserv配置多站点教程第一步:下载Appserv并安装
我下载的是appserv-win32-8.4.0版本,下载后直接双击并根据提示安装即可。
Appserv配置多站点教程第二步:修改Windows系统hosts文件
我的Appserv安装环境是WindowsXP,为什么首先要修改hosts文件呢?这是因为一般情况下Appserv的安装调试都是在本机上进行的,当使用Appserv配置多站点时,域名指向都是127.0.0.1,你需要对不同的域名进行映射,否则即便配置完毕也是无法访问的,除非你有公网IP,并通过DNS进行映射。
找到WINDOWSsystem32driversetchosts文件并打开,找到127.0.0.1 localhost,并添加需要映射的测试站点域名,比如:
127.0.0.1 www.landui.com
127.0.0.1 www.landui.com
保存hosts文件。
Appserv配置多站点教程第三步:修改Apache配置文件,启用虚主机配置
在Appserv安装目录中找到Apache2.2conf目录,打开apache配置文件httpd.conf,找到# Virtual hosts将
#Include conf/extra/httpd-vhosts.conf
中的#去除。
由于Appserv配置中Apache配置是以定制方式存在,上述语句代表Apache启用虚拟主机配置。同时Appserv多站点配置功能是以虚拟主机的方式实现,你可以一并将httpd配置文件中的
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#去除(经过我的测试,其实此Apache Module加不加载没太大关系)
Appserv配置多站点教程第四步:修改Apache虚拟主机配置
打开conf/extra/httpd-vhosts.conf配置文件,文件中本身存在两条虚拟主机配置记录,只要稍作修改即可。
将ServerAdmin(邮件地址)、DocumentRoot(网站根目录,我设定的目录为”C:/AppServ/www/wwwleapsoulcn/”和C:/AppServ/www/wwwphptestcn/) 、ServerName(站点域名信息)、ServerAlias(站点域名别名)配置选项设置为你需要设定的信息即可。Appserv配置多站点实例如下:
ServerAdmin 你的邮箱地址
DocumentRoot “C:/AppServ/www/wwwleapsoulcn/”
ServerName leapsoul.cn
ServerAlias www.landui.com
ErrorLog “logs/dummy-host.x-error.log”
CustomLog “logs/dummy-host.x-access.log” common
ServerAdmin 你的邮箱地址
DocumentRoot “C:/AppServ/www/wwwphptestcn/”
ServerName www.landui.com
ErrorLog “logs/dummy-host2.x-error.log”
CustomLog “logs/dummy-host2.x-access.log” common
这里官方给力模板我们可以利用起来修改添加。
Appserv多站点配置提示:如果同时配置多个虚拟主机,务必确保第一条虚拟主机记录不可缺失ServerAlias选项,否则配置不会成功。
最后保存conf/extra/httpd-vhosts.conf配置文件。
重启Apache时注意请在CMD模式下通过net start apache2.2或net stop apache2.2方式重?Apache。
此时通过IE以域名方式即可访问使用Appserv配置的多个站点了。
上述方法是以域名方式使用Appserv配置多站点访问功能,如果以IP方式也是可以实现此配置功能,区别在于需要使用不同的端口。除了原有的上述httpd.conf配置外,需要再Listen 80语句后,添加需要侦听的端口,比如:
Listen 8080
Listen 8081
然后将conf/extra/httpd-vhosts.conf配置文件中的修改为对应IP:对应侦听端口>即可,其他配置不变。
首先到官网下载http://www.landui.com/downloads.php windows版本的php高于5.3的
然后将C:AppServphp5文件夹以及C:windowsphp.ini备份好之后将下载的文件覆盖至C:AppServphp5
然后将其中的php.ini-production更名为php.ini然后覆盖C:windowsphp.ini
打开并编辑
去掉以下几种注释
extension=php_curl.dll
extension=php_gd2.dll
extension=php_gmp.dll
extension=php_imap.dll
extension=php_mbstring.dll
extension=php_exif.dll
extension=php_mcrypt.dll
extension=php_mysql.dll
extension=php_pdo.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
修?extension_dir = “C:/AppServ/php5/ext/”,
重启apache服务器,完成升级
1、rpm包安装的,可以用 rpm -qa 看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”
2、以deb包安装的,可以用 dpkg -l 看到。如果是查找指定软件包,用 dpkg -l | grep “软件或者包的名字”
3、yum方法安装的,可以用 yum list installed 查找,如果是查找指定包,用 yum list installed | grep “软件名或者包名”
1、把/home目录下面的mydata目录压缩为mydata.zip
zip -r mydata.zip mydata #压缩mydata目录
2、把/home目录下面的mydata.zip解压到mydatabak目录里面
unzip mydata.zip -d mydatabak
3、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zip
zip -r abc123.zip abc 123.txt
4、把/home目录下面的wwwroot.zip直接解压到/home目录里面
unzip wwwroot.zip
5、把/home目录下面的abc12.zip、abc23.zip、abc34.zip同时解压到/home目录里面
unzip abc*.zip
6、查看把/home目录下面的wwwroot.zip里面的内容
unzip -v wwwroot.zip
7、验证/home目录下面的wwwroot.zip是否完整
unzip -t wwwroot.zip
8、把/home目录下面wwwroot.zip里面的所有文件解压到第一级目录
unzip -j wwwroot.zip
主要参数
-c:将解压缩的结果
-l:显示压缩文件内所包含的文件
-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-t:检查压缩文件是否正确
-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中
-v:执行是时显示详细的信息
-z:仅显示压缩文件的备注文字
-a:对文本文件进行必要的字符转换
-b:不要对文本文件进行字符转换
-C:压缩文件中的文件名称区分大小写
-j:不处理压缩文件中原有的目录路径
-L:将压缩文件中的全部文件名改为小写
-M:将输出结果送到more程序处理
-n:解压缩时不要覆盖原有的文件
-o:不必先询问用户,unzip执行后覆盖原有文件
-P:使用zip的密码选项
-q:执行时不显示任何信息
-s:将文件名中的空白字符转换为底线字符
-V:保留VMS的文件版本信息
-X:解压缩时同时回存文件原来的UID/GID
开启gzip压缩的方法很简单,连接服务器并打开配置文件“httpd.conf”,找到下面这两句,去掉前面的“#”
代码如下:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
在配置文件的最后添加下面的语句:
<IfModule deflate_module>
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc|avi|mov|mp3|rm)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
分析原因:从网络和拨号连接文件?中隐藏,因为它本身并没有在计算机中存在,或是个不工作的旧适配器。如果相同的地址分配给两个适器,并且它们都处于活动状态,只有一个会使用这个地址。这会造成不正确的系统配置。
方法一:
1.开始→执行→cmd
2.输入:
输入:
3.
4.
方法二:
故障原因:Windows
被拆掉了,但它的相关配置文件却已被Windows
春夏秋冬走健康之路看四季养生网 健康饮食 养生问题 母婴保健 养生小常识
你现在计算机中安装了两张网卡,而原来一张已绑定了192.168.0.1这个IP地址,再给另一张网卡绑定此IP时自然会有出错提示!
解决方法:打开注册表,查找键值:
[HKEY_LOCAL_MACHINESYSTEMCurrentCont
信息从class中找到相应的硬件配置信息项删除即可。注意:每一项里面都有相应硬件的描述信息,删除之前请确认不要删错。
注意:如果自己不清楚网卡注册表信息,打开网卡驱动文件夹,在打开驱动文件夹XP安装目录,里面有记事本,信息都在里面,比如
8139/810X网卡信息就是{4d36e972-e325-11ce-bfc1-08002be10318},然后在子目录里找到8139网卡的信息,删除即可.
方法3:
Windows
并且,即使网卡虽被拆掉了,但它的相关配置文件却已被Windows
所以,在”故障现象”中所遇到的,就相当于是系统认为你现在计算机中安装了两张网卡,而原来一张已绑定
了192.168.50.188这个IP地址,再给另一张网卡绑定此IP时自然会有出错提示!
打开注册表,查找键值:
[HKEY_LOCAL_MACHINESYSTEMCurrentCont
按提示的原来网卡的信息从class中找到相应的硬件配置信息项删除即可。
每一项里面都有相应硬件的描述信息,删除之前请确认不要删错。
如果自己不清楚网卡注册表信息,可以打开网卡的属性对话框,根据网卡描述性文字(如是已经删除掉的网
卡,可根据修改IP时,提示的对话框中的网卡名)部分文本,在class项下搜索,即可定位到所在网卡配置文
件。如果先后使用的网卡厂家、型号均一样,唯一不一样的是各自项下的”NetCfgInstanceId”值。
如此情况可通过修改当前网卡的速率或但双工模?,之后在注册表项下刷新,对应的注册表项变化则为当前
网卡。
比如,先后的网卡都是Realtek的8139D网卡,通过搜索Realtek,有两个注册项。
再次确认,将网卡工作模式恢复至auto自动协商,键值变更为1。
此项为当前网卡,相同的另外一项就是以前的陈旧网卡信息,先导出备份,接着,删除。
再次修改IP设置,没有了之前的警告窗口了。
1.单击开始,指向所有程序、指向附件,然后单击命令提示符。2.在命令提示符处键入以下命令,然后按
3.在命令提示符处键入以下命令,然后按
4.在命令提示符处键入以下命令,然后按
注重:在设备治理器中单击查看菜单上的“显示隐藏的设备”才能看到未连接到计算机的设备。6.在问题解决之后,关闭设备治理器。7.在命令提示符处键入
请注重,关闭命令提示符窗口时,Windows
devmgr_show_nonpresent_devices=1
网友回复:在设备治理器里钩选“显示隐藏的设备”后看到“网络适配器”中有个灰度显示的旧网卡设备,把它卸载后重启系统,现在本地连接等都恢复正常了。
建议首选方法一
项目部署到Apache Http Server上面,通过apachectl -t 检测配置文件也没有问题。可是通过浏览器访问,却出现了“you don’t have permission to access / on this server”.
1、首先,查看conf.d/python.conf文件
<Directory “项目路径”>
Options Indexes FollowSymLinks +Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
上面标红部分,表示允许任何人访问目录
2、其次,既然配置文件没有问题,那就需要考虑http.conf文件中指定的用户和组的访问权限。在Apache的wiki上有关于PermissionDenied的解决方法,链接是http://www.landui.com/httpd/13PermissionDenied,译文如下:
Error 13 指的是文件系统的访问权限错误。也就是由于错误的权限,apache被拒绝访问。一般的来说,这并不意味着是Apache配置文件存在错误。
为了给文件提供服务,Apache必须有适当的权限去访问那些文件,这些权限是由操作系统授予的。特别是在httpd.conf文件中指定User或者Group必须能够读取所有被服务的文件,以及查找包含那些文件的目录和所有的父目录直至文件系统的根。
一个类unix操作系统上不属于httpd.conf文件中指定的User或Group的资源的典型访问权限,对于普通的文件是644 -rw-r–r–,对于文件夹或者CGI脚本是755 drwxr-x-r-x。你也可能需要去查看操作系统所支持的扩展的访问权限(例如SELinux访问权限).
例子
当访问类unix操作系统上的/usr/local/apache2/htdocs/foo/bar.htm文件时,你收到了Permission Denied的错误。
首先,查看文件的访问权限:
$ cd /usr/local/apache2/htdocs/foo
$ ls -l bar.htm
如果须要的话,就修复它们:
$ chmod 644 bar.html
对文件夹以及每个父文件夹做相同的操作(/usr/local/apache2/htdocs/foo,/usr/local/apache2/htdocs,/usr/local/apache2,/usr/local/,/usr):
$ ls -la
$ chmod +x
$ cd ..
$ #repeat up to the root
在一些系统上,可使用工具namei来列出各个路径上的不同组件的访问权限,然后去发现是否有权限问题:
$ namei -m /usr/local/apache2/htdocs/foo/bar.html
3、最后,如果还是没有解决问题,那么需要查看扩展的访问权限。
使用setenforce 0关闭SELinux,看是否解决问题。
[hadoop@master ~]$ cd /home/hadoop/
[hadoop@master ~]$ ssh-keygen -t rsa
一路回车
[hadoop@master ~]$ cd .ssh/
[hadoop@master .ssh]$ cp id_rsa.pub authorized_keys
[hadoop@master .ssh]$ chmod 600 authorized_keys
把authorized_keys复制到其他要无密的机器上
[hadoop@master ~]$ scp authorized_keys root@192.168.56.102:/home/hadoop/.ssh
要以root权限过去,否则会出错
1.临时修改主机名
显示主机名:
oracle@localhost:~$ hostnamelocalhost
修改主机名:
oracle@localhost:~$ sudo hostname orcl1 oracle@localhost:~$ hostnameorcl1
2.永久修改主机名
以上的修改只是临时修改,重启后就恢复原样了。
步骤1:
修改/etc/sysconfig/network中的hostname
vi /etc/sysconfig/networkHOSTNAME=localhost.localdomain #修改localhost.localdomain为orcl1
修改network的HOSTNAME项。点前面是主机名,点后面是域名。没有点就是主机名。
这个是永久修改,重启后生效。目前不知道怎么立即生效。
想立即生效,可以同时采用第一种方法。
步骤2:
修改/etc/hosts文件
vi /etc/hosts127.0.0.1 localhost.localdomain #修改localhost.localdomain为orcl1
shutdown -r now #最后,重启服务器即可。
用root身份登入 进入mysql库 修改user表即可。
操作如下:
D:MySQLin>mysql -uroot -proot
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 391
Server version: 5.0.51b-community-nt-log MySQL Community Edition (GPL)
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql> use mysql;
Database changed
mysql> update user set user=’xly’ where user=’root’;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> flush privileges;
mysql> select user,host,password from mysql.user;
+——+———–+——————————————-+
| user | host | password |
+——+———–+——————————————-+
| xly | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| yxl | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| xly | % | *6BB4837EBEE4568DDA7DC67ED2CA2AD9 |
+——+———–+——————————————-+
3 rows in set (0.00 sec)
sudo mkdir /usr/local/java
cp jdk-7u45-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
sudo tar xvf jdk-7u45-linux-x64.tar.gz
sudo rm jdk-7u45-linux-x64.tar.gz
sudo gedit /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.7.0_45 export JRE_HOME=/usr/local/java/jdk1.7.0_45/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin: $PATH
source /etc/profile
java -version
上网时经常会遇到某个网站无法访问或访问速度很慢,特别是国外的网站,可能会怀疑自己的电脑或网络,此时可用WinMTR来找出网络的异常。
使用方法如下:
下载WinMTR后,直接双击即可运行,打开后,我们可以看到Host一栏的文本框,在Host文本框内输入您要追踪的IP或者域名,再按Start ,此时就可以看到如下图所示的 tracert 与 Ping 的结果,如下图所示:
可以多测试几分钟,测试结束后,我们可以将结果导出
Copy Text to clipboard – 将结果以文本形式复制到剪贴板
Copy HTML to clipboard – 将结果以HTML形式复制到剪贴板
Export TEXT – 将结果以文本形式导出
Export HTML – 将结果以HTML形式导出
Options – 设置
在 Options 有几个选项可以设置,分别是数据包传送的间隔时间,ping 数据包的大小,最多现实经过的路由节点主机以及是否解析为IP。
WinMTR测试结果名词解释:
Hostname:到目的服务器要经过的每个节点主机IP或名称 。
Nr:经过节点的数量;以上图洛杉矶美国KT机房为例子:一共要经过10个节点,其中第一个是当地宽带商的网关。
Loss%:ping 数据包回复失败的百分比;由此可判断那个节点(线路)出现故障,是服务器所在机房还是国际路由干路。 目前测试的这个香港线路,还是正常的!
Sent:已经传送的数据包数量 。
Recv:成功接收的数据包数量 。
Best:回应时间的最小值 。
Avrg:平均回应时间 。
Worst:回应时间的最大值。
Last:最后一个数据包的回应时间。
主要是文件/dede/media_add.php或者/你的后台名字/media_add.php。
搜索$fullfilename = $cfg_basedir.$filename;(大概在69行左右)
替换成
if (preg_match(‘#.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i’, trim($filename))) { ShowMsg(“你指定的文件名被系统禁止!”,’javascript:;’); exit(); } $fullfilename = $cfg_basedir.$filename;
大红色地方标记了修改的地方,然后保存,接着备份原文件,比如文件名变为media_add.php.16.07.27.bak。然后上传修改好的文件即可。
【问题分析】
有的时候我们可能需要重装lnmp,删除wwwroot目录的时候,可能会提示无法删除 .user.ini,Operation not permitted
【解决方法】
无法删除“.user.ini”文件解决方法,运行后删除即可
chattr -i .user.ini
如果是需要修改文件,记得修改完以后运行:
chattr +i .user.ini
CentOS7 使用的是 firewall 使用起来可能有一些不方便,下面蓝队网络为大家介绍下卸载firewall安装iptables的方法
安装iptable iptable-service
#先检查是否安装了iptables service iptables status #安装iptables yum install -y iptables #升级iptables yum update iptables #安装iptables-services yum install iptables-services
禁用/停止自带的firewalld服务
#停止firewalld服务 systemctl stop firewalld #禁用firewalld服务 systemctl mask firewalld
前言
在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库。而在设计表的时候,我们都会关注一个问题,使用什么存储引擎。等一下,存储引擎?什么是存储引擎?
什么是存储引擎?
关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。有的?简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差;而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,数据的处理上也会存在着差异,那么。对于MySQL来说,它提供了很多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用MySQL强大的功能。这篇博文将总结和分析各个引擎的特点,以及适用场合,并不会纠结于更深层次的东西。我的学习方法是先学会用,懂得怎么用,再去知道到底是如何能用的。下面就对MySQL支持的存储引擎进行简单的介绍。
MyISAM
在mysql客户端中,使用以下命令可以查看MySQL支持的引擎?
复制代码代码如下:
show engines;
MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表明。例如,我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:
1.tb_demo.frm,存储表定义;
2.tb_demo.MYD,存储数据;
3.tb_demo.MYI,存储索引。
MyISAM表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。MyISAM存储引擎特别适合在以下几种情况下使用:
1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
2.插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。
InnoDB
InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。我的电脑上安装的MySQL 5.6.13版,InnoDB就是作为默认的存储引擎。InnoDB还引入了行级锁定和外键约束,在以下场合下,使用InnoDB是最理想的选择:
1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
4.外键约束。MySQL支持外键的存储引擎只有InnoDB。
5.支持自动增加列AUTO_INCREMENT属性。
一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。
MEMORY
使用MySQL Memory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护?程崩溃时,所有的Memory数据都会丢失。获得速度的同时也带来了一些缺陷。它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。
一般在以下几种情况下使用Memory存储引擎:
1.目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。
2.如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。
3.存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。
Memory同时支持散列索引和B树索引。B树索引的优于散列索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。散列索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合用在order by子句中。
可以在表创建时利用USING子句指定要使用的版本。例如:
复制代码代码如下:
create table users
(
id smallint unsigned not null auto_increment,
username varchar(15) not null,
pwd varchar(15) not null,
index using hash (username),
primary key (id)
)engine=memory;
上述代码创建了一个表,在username字段上使用了HASH散列索引。下面的代码就创建一个表,使用BTREE索引。
复制代码代码如下:
create table users
(
id smallint unsigned not null auto_increment,
username varchar(15) not null,
pwd varchar(15) not null,
index using btree (username),
primary key (id)
)engine=memory;
MERGE
MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,尽管其使用不如其它引擎突出,但是在某些情况下非常有用。说白了,Merge表就是几个相同MyISAM表的聚合器;Merge表中并没有数据,对Merge类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行操作。Merge存储引擎的使用场景。
对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定的时间端相关。例如:可以用12个相同的表来存储服务器日志数据,每个表用对应各个月份的名字来命名。当有必要基于所有12个日志表的数据来生成报表,这意味着需要编写并更新多表查询,以反映这些表中的信息。与其编写这些可能出现错误的查询,不如将这些表合并起来使用一条查询,之后再删除Merge表,而不影响原来的数据,删除Merge表只是删除Merge表的定义,对内部的表没有任何影响。
ARCHIVE
Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就开始支持索引了。Archive拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。
方法一:看到CakePHP文档要求安装pdo_mysql扩展,于是就尝试安装了一下,这里我的系统是CentOS 6.0,如果你的系统是其他版本的Linux/Unix,可以参考,如果你的系统是Windows的,抱歉,以下内容不适合你,请移步.
首先是下载pdo_mysql扩展的源码包,下载页面在这里:http://www.landui.com/package/PDO_MYSQL,可以先下载了然后用FTP传到服务器.
我是在复制了下载地址以后使用wget直接下载到服务器端的.
# wget http://www.landui.com/get/PDO_MYSQL-1.0.2.tgz
然后是解压缩.
# tar -zxvf PDO_MYSQL-1.0.2.tgz
进入解压后的目录,然后执行phpize.
# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
下面生成makefile,后面的两个参数必须要添加,一开始我没有添加,结果分别都提示找不到php-config和mysql的header文件.
# https://www.landui.com/configure –with-php-config=/usr/local/php/bin/php-config –with-pdo-mysql=/usr/local/mysql
在make之前还要做一个mysql的header文件的软连接,因为mysql安装的时候指定了目录,不做软连接的话,还是找不到header文件.
# ln -s /usr/local/mysql/include/* /usr/local/include/
然后make和make install.
# make
# make install
之后会提示如下,意思是扩展被安装到了如下目录里.
Installing shared extensions:/usr/local/php/lib/php/extensions/no-debug-zts-/
为了方便,我把pdo_mysql.so文件移动到extensions目录下.
# mv /usr/local/php/lib/php/extensions/no-debug-zts-/pdo_mysql.so /usr/local/php/lib/php/extensions/
随后就可以修改php.ini文件了.
找到; extension_dir = “https://www.landui.com/”这一行,去掉注释,并修改路径.
extension_dir = “/usr/local/php/lib/php/extensions/”
这里经过我测试,发现php只会从该目录寻找扩展so,而并不寻找该目录下的子目录,所以之前我为了统一管理,把so文件都移动到该目录下.
找到; extension=php_pdo_mysql.dll这一行,去掉注释,并修改后面的文件名.
extension=pdo_mysql.so
文件名不太一样,这里要把php_前缀去掉,否则找不到文件,后面的dll是windows下的文件名,我们改成so.
最后重启apache就可以了,用phpinfo()查看发现已经生效了.
方法二
PDO_MYSQL以下操作都在Linux 系统下操作
1、下载 文件 或者 进入 在PHP源码包中进入ext/pdo_mysql
http://www.landui.com/get/PDO_MYSQL-1.0.2.tgz
2、解压文件
tar zxvf PDO_MYSQL-1.0.2.tgz
3、配置和编译文件
cd PDO_MYSQL-1.0.2
/usr/local/php/bin/phpize
https://www.landui.com/configure –with-php-config=/usr/local/php/bin/php-config –with-pdo-mysql=/usr/local/mysql
make
make install
注:我的PHP安装在:/usr/local/php/ mysql 安装在:/usr/local/mysql 编译的时候注意你自己的安装目录在哪里.
3、安装到PHP配置下
把这个记住,然后打开 php.ini文件,并添加一行:
extension=pdo_mysql.so
windows PDO MYSQL扩展安装
php.ini中没有开启pdo,故修改php.ini,将形如下面的代码前面去掉分号,修改后如下:
extension_dir=“E:/amp/php/ext” //这里配置为你自己的ext目录路径
……
extension=php_mysql.dll
……
extension=php_pdo.dll
……
extension=php_pdo_mysql.dll
重启apache后访问又继续报以下错误:
CDbConnection 无法开启数据库连线:could not find driver
意思是无法找到数据库驱动,我又用phpinfo看了一下,PDO确实是开启了,但是PDO那一项中支持的数据库显示no value,说明无法加载php_pdo_mysql.dll这个扩展,经过多次尝试,包括更换php的版本,更换mysql的版本,但是均不奏效,难道真的无法开启php的mysql pdo?展了吗?
在网上查了又查,终于找到解决方案.
方法一:需要把php安装目录的路径加入到系统环境变量PATH中,这样就可以解决问题.
方法二:因为我是在服务器上部署的,正在运行着的服务器,所以无法重启,故也可将php安装目录下的libmysql.dll复制到windows目录下,重启apache.
在mysql中复制表有很多种方法,如有create select from或者insert into select from及有选择性的insert into(a,b,c) select a,b,c from这些基本可以完成我们的操作了,下面我来总结一下mysql复制表语句。
复制整个表,代码如下:
create table new_table select * from old_table;
复制表,不复制数据,代码如下:
create table new_table select * from old_table where 0;
主键,索引,自增等其他额外特征不会被带到新表中,这点和其他的数据库产品类似.
上面为核心两句了.
1、MySQL复制表结构及数据到新表,代码如下:
CREATE TABLE `新表` select * from `旧表`
2、只复制表结构到新表,代码如下:
CREATE TABLE `新表` select * from `旧表` where 1=2
或
CREATE TABLE `新表` LIKE `旧表`
3、复制旧表的数据到新表(假设两个表结构一样),代码如下:
INSERT INTO `新表` select * from `旧表`
4、复制旧表的数据到新表(假设两个表结构不一样),代码如下:
INSERT INTO `新表`(字段1,字段2,…….) select 字段1,字段2,…… from `旧表`
5、show create table 旧表;
这样会将旧表的创建命令列出,我们只需要将该命令拷贝出来,更改table的名字,就可以建立一个完全一样的表.
有时候这些MySQL界面工具会报错,这个时候用命令行更好,比如复制一个表字段数据到另外一个表的字段,可以这么写:
update tb_1 INNER JOIN tb_2 ON tb_1.tid = tb_2.tid SET tb_1.tcontent = tb_2.tcontent
下面是一个实际例子,将PHPCMS已生成的静态页面的链接写入phpcms_content表中的url字段,先这样拼凑出需要的url字段列,代码如下:
select concat(from_UNIXTIME(inputtime,’%Y/%m%d’), ‘/’, contentid, ‘.html’) AS dt FROM phpcms_content ORDER BY contentid DESC //phpfensi.com
然后再查询编辑器(navicat)中,将整段复制拷贝到phpcms_content表中的url列即可.
1、systemctl是RHEL 7 的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。可以使用它永久性或只在当前会话中启用/禁用服务。
systemctl可以列出正在运行的服务状态,如图:
systemd-cgls 以树形列出正在运行的进程,它可以递归显示控制组内容。如图:
我们有这样的需求:Linux系统下一个文件不允许别人修改、删除或者只允许添加,我们就可以使用chattr命令。
我们来操作一下:
看看使用方法
-R:递归处理所有的文件及子目录。
-V:详细显示修改内容,并打印输出。
-:失效属性。
+?激活属性。
= :指定属性。
A:Atime,告诉系统不要修改对这个文件的最后访问时间。
S:Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
a:Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
i:Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那?任何的进程只能修改目录之下的文件,不允许建立和删除文件。
D:检查压缩文件中的错误。
d:No dump,在进行文件系统备份时,dump程序将忽略这个文件。
C:Compress,系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘。
s:Secure Delete,让系统在删除这个文件时,使用0填充文件所在的区域。
u:Undelete,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件。
下面我尝试操作一个文件:
下面我给他加个所有用户都不能修改 + i
用vi编辑测试下,提示不可写
查看linux版本:
[root@localhost ~]# cat /etc/redhat-release
1) 列出所有版本信息,
[root@localhost ~]# lsb_release -a
LSB Version:
Distributor ID: CentOS
Description:
Release:
Codename:
注:这个命令适用于所有的linux,包括Redhat、SuSE、Debian等发行版。
2) 执行cat /etc/issue,例如如下:
[root@localhost ~]# cat /etc/issue
CentOS release 5.5 (Final)
Kernel r on an m
本文章为各位介?解决yii webservice 提示:Procedure ‘getSent’ not present 错误方法。
其实根据常用的webservice清除缓存方法,在client端加入这样一句话:
ini_set(“soap.wsdl_cache_enabled”, “0”);
应该就可以了,但是处理了好久,在本地测试没问题,放到服务器上就不行,一直提示:Procedure ‘getSent’ not present
后来查看PHP的配置文件php.ini,找到这样一句话:soap.wsdl_cache_dir=”/tmp”
然后进入对应目录,看到有这样子的文件:
wsdl-root-37c8f47f71a35a60f667be40ae619d0b
wsdl开头的文件,都是webservice的缓存文件,删掉这些文件,再试,一切正常了.
下面蓝队网络给大家实际操作下,挂载linux主机的第二块盘。
查看主机硬盘情况(fdisk -l):
我们看到有sda和sdb两块盘,实际上sda就是我们的系统盘,sdb是我们的第二块盘,新开的云主机第二块盘
是没有挂载的,我们现在要做的工作就是挂载这块盘到我们的文件夹下,您可以挂载到任意的文件夹,一般情况下,
我们挂载在 /home下作为数据盘。我们看下一步:
我们先给这块盘分区,一般我们划分一个分区就够了,试用 fdisk /dev/sdb 命令
按下m,看有哪些命令
按下n,增加分区:
按下p, 回车,输入1,回车:
回车回车,w保存退出。
fdisk -l 查看磁盘情况
我们发现这块盘下面多了一个分区 sdb1 ,就是我们刚才分出来的。
下面我们在挂载这个分区之前先格式化这个分区,mkfs命令,我们这里使用ext4格式
下面我们挂载下,使用mount命令:
检查下挂载情况,使用df -hal 命令:
我们发现硬盘sdb下的分区sdb1就成功挂载到/home下面了,最后,我们还需要让系统启动的时候就自动挂载,不然系统重启后就找不到了?
我们编辑/etc/fstab 文件,写入 /dev/sdb1 /home defaults ext4 1 2 ,如图:
保存退出,到目前为止,我们的磁盘挂载操作就完成了,蓝队网络祝您生活愉快!
主分区,也称为主磁盘分区,和扩展分区、逻辑分区一样,是一种分区类型。主分区中不能再划分其他类型的分区,因此每个主分区都相当于一个逻辑磁盘(在这一点上主分区和逻辑分区很相似,但主分区是直接在硬盘上划分的,逻辑分区则必须建立于扩展分区中)。
1. 一个硬盘可以有1到3个主分区和1个扩展分区,也可以只有主分区而没有扩展分区,但主分区必须至少有1个,扩展分区则最多只有1个,且主分区+扩展分区总共不能超过4个。逻辑分区可以有若干个。
(硬盘的第一个扇区最重要,其上面有硬盘主?导记录(占用446bytes)和分区表(占用64 bytes),之所以只能有四个主分区就是因为分区表只有64B,只能装下4条记录)
所以只能有四个主分区的硬盘的限制,并不是操作?统的限制,而最多只能有一个拓展分区则是操作系统的限制
2. 分出主分区后,其余的部分可以分成扩展分区,一般是剩下的部分全部分成扩展分区,也可以不全分,剩下的部分就浪费了。
3. 扩展分区不能直接使用,必须分成?干逻辑分区。所有的逻辑分区都是扩展分区的?部分。 硬盘的容量=主分区的容量+扩展分区的容量; 扩展分区的容量=各个逻辑分区的容量之和。
4. 由主分区和逻辑分区构成的逻辑磁盘称为驱动器(Drive)或卷(Volume)。
5. 激活的主分区会成为“引导分区”(或称为“启动分区”),引导分区会被操作系统和主板认定为第一个逻辑磁盘(在DOS/Windows中会被识别为“驱动器C:”或“本地磁盘C:”,即通称的C盘)。有关DOS/Windows启动的重要文件,如引导记录、boot.ini、ntldr、ntdetect.com等,必须放在引导分区中。
下面看看我这台linux服务器的分区情况
可以看到,我这块硬盘 sdb ,一共有四个分区,其中 sdb1 和sdb2 和sdb3 为主分区,sdb4 为扩展分区,在sdb4里面sdb5 和sdb6 为逻辑分区,
扩展分区要占用主分区(最多可以有4个)的一个分区号码
一块硬盘可以只设主分区,这时主分区可设置4个分区号。也可以设置成主分区+逻辑分区,这时也是最多4个分区号码,但是变成了4 = 3 + 1.其中4是主分区和扩展分区加起来最多4个; 3是主分区,可以小于或等于3; 1??展分区号,占用了一个主分区号。从5开始到16,都是逻辑分区。如果只有一个5,则扩展分区不再进行分区了,那么扩展分区就是逻辑分区了(扩展分区的磁盘总量等于一个逻辑分区的磁盘总量)。常见的是扩展分区被分成几个逻辑分区,用5,6,7,8等号码标识。
init方法
1、centos7的grub2界面会有两个入口,正常系统入口和救援模式;
2、修改grub2引导
在正常系统入口上按下”e”,会进入edit模式,搜寻ro那一行,以linux16开头的;
把ro更改成rw;(把只读更改成可写)
把rhgb quiet删除;(quiet模式没有代码行唰唰的走,可以删除)
增加init=/bin/sh;(或init=/bin/bash,指定shell环境)
按下ctrl+x来启动系统。
3、修改root密码
#passwd #修改密码
#touch /.autorelabel #据说是selinux在重启后更新label
#exec /sbin/init #正常启动init进程
目前的Ext4文件系统是第一个稳定版本,整个的开发进度和发布计划都被放缓了,就是为了保证用户可以享受到“和使用Ext3同等级”的稳定。
一个非常重要的事情是,目前还没有Ext4 Grub。更准确的说,就是目前没有grub支持ext4。换句话说,就是你目前的发行版本的grub不支持ext4。目前我们的Grub2正在开发之中,在ubuntu和debian发行版中已经有了grub2的grub-pc软件包了,但是目前官方仍没有宣布正式支持。在Google SoC中也包含了一个开发版本,且发布了相关补丁。你可以试用一下,你自己选择喽。
在你的发行版本的下一个新版本之中,可能会有相关的支持出现。所以安全起见,尽量保持你的/boot目录为Ext3文件系统类型。
警告归警告,转换到Ext4其实是件很容易的事情,如下方法均可:
1 建立Ext4文件系统。
这是最简单的方法,你只需要升级你的e2fsprogs到Ext4,并且使用mkfs.ext4命令创建文件系统即可。
2 从Ext3迁移到Ext4。
你需要使用tune2fs命令和fsck命令,并且当前文件系统需要被卸载才可以。运行命令
tune2fs -O extents,uninit_bg,dir_index /dev/yourfilesystem
此后,你务必运行fsck命令,否则Ext4将无法挂载你的新文件系统。在fsck过程中,可能会有一些error需要你的确认。你可以考虑使用 -p选项,来告诉fsck你想要的是“automatic repair”,即fsck -pf /dev/yourfilesystem
3 用Ext4挂载Ext3文件系统。
你可以使用mount -t ext4 /dev/yourpartition /mnt来将一个Ext3文件系统用Ext4来挂载,但你将享受不到那些需要改变磁盘格式才可以享受得到的特性,比如Extents。你可以享受到的只有 那些不需要改变磁盘格式即可享受得到的特性,比如多块分配、延迟分配等。我们当然不建议您这么做,因为Ext4的优秀特性,您将无法体会。
现象:
ping内网正常
ping外网ip,域名均无法正常,返回错误提示:connect: Network is unreachable
运行命令route显示,发现,没有任何的网关信息。然后检查网卡配置,配置信息如下:
DEVICE=eth0
HWADDR=……..(请忽略)
TYPE=Ethernet
UUID=………(忽略)
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.118.131
NETMASK=255.255.255.0
DNS1=8.8.8.8
于是,添加上GATEWAY=192.168.118.2后,重启网卡服务:service network restart后,就可以访问外网。
运行yum报错Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
今天给Centos通过rpm -Uvh装了个epel的扩展后,执行yum就开始报错:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
在网上查了查,解决办法都是编辑/etc/yum.repos.d/epel.repo,把基础的恢复,镜像的地址注释掉
改成
虚拟机备份转移后,网络启动异常,提示“SIOCSIFADDR: No such device”
he problem lies in the fact that ethernet MAC addresses are cached.
You need to remove a file to clear the cached value:
问题是由于以太网MAC地址被缓存。 你需要删除一个文件来清除缓存值:
$ sudo rm /etc/udev/rules.d/70-persistent-net.rules
$ reboot
重启后就恢复正常!
开始
首先在自己家的目录创建一个文件夹用来保存删除的文件
mkdir -p ~/.Trash
修改.bashrc文件
vi ~/.bashrc
在.bashrc文件后面添加下面这些
alias rm=trash alias rl='ls ~/.Trash' alias ur=undelfile undelfile() { mv -i ~/.Trash/$@ https://www.landui.com/ } trash() { mv $@ ~/.Trash/ }cleartrash() { read -p "Clear trash?[n]" confirm [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /usr/bin/rm -rf ~/.Trash/* }
添加完毕后保存,执行source命令生效
source ~/.bashrc
使用
你现在可以使用rm(删除),ur(撤销),rl(列出回收站),cleartrash(清空回收站)命令了。
#删除一个文件夹,helloworld下面的文件均被移到回收站中$rm helloworld#删除一个文件$rm abc.txt#撤销abc.txt$ur abc.txt#撤销helloworld文件夹$ur helloworld#列出回收站$rl#清空回收站cleartrash
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#数据库用户名
dbuser=’root’
#数据库用密码
dbpasswd=”
需要备份的数据库,多个数据库用空格分开
dbname=’xiaohuai xiaohuai2′
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份路径
logpath=’/home/mysqlbak’
#数据备份路径
datapath=’/home/mysqlbak’
#日志记录头部
echo ‘”备份时间为${backtime},备份数据库表 ${dbname} 开始” >> ${logpath}/log.log
#正式备份数据库
for table in $dbname; do
source=`mysqldump -u ${dbuser} -p${dbpasswd} ${table}> ${logpath}/${backtime}.sql` 2>> ${logpath}/mysqllog.log;
#备份成功以下操作
if [ “$?” == 0 ];then
cd $datapath
#为节约硬盘空间,将数据库压缩
tar jcf ${table}${backtime}.tar.bz2 ${backtime}.sql > /dev/null
#删除原始文件,只留压缩后文件
rm -f ${datapath}/${backtime}.sql
#删除七天前备份,也就是只保存7天内的备份
find $datapath -name “*.tar.bz2” -type f -mtime +7 -exec rm -rf {} ; > /dev/null 2>&1
echo “数据库表 ${dbname} 备份成功!!” >> ${logpath}/mysqllog.log
else
#备份失败则进行以下操作
echo “数据库表 ${dbname} 备份失败!!” >> ${logpath}/mysqllog.log
fi
done
如果这个sh文件是在win下编辑的,需要用Uedit转换为unix格式,否则sh会执行不成功,如图
另外,一定要记得给这个sh文件执行权限
1
chmod +x /home/sh/mysqlbak.sh
定时执行脚本:
方式:
1、
执行 crontab -e
输入以下内容:
______________________________________________________________________________
00 00 * * * /bin/bash yourpath/mysqlbak.sh
2、
打开自动执行文件
vi /etc/crontab
在etc中加入如下内容,让其自动执行任务。
00 00 * * * root /mysqlbak.sh
以上两个 00 00 * 为每天的凌晨自动执行脚本
分 时 日 月 周 命?
M: 分钟(0-59)。每分钟用*或者 */1表示
H:小时(0-23)。(0表示0点)
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)。
另外,测试的时候可以直接进入sh目录下执行
# sh sh https://www.landui.com/mysqlbak.sh
等执行完了看看
#日志备份路径
logpath=’/home/mysqlbak’
这个目录下有没有备份文件,如果有,则表示sh执行成功,没有错误。
由于各种因素,导致了PHP版本的碎片化。PHP的向下不兼容导致了PHP程序的移植性很差。因此才会有不同版本的PHP要求选择的需求。
护卫神主机系统,为同一台服务器上,配备了PHP5.2/PHP5.3/PHP5.4/PHP5.5/PHP5.6 一共5个版本,每个网站均可以自己独立选择所需的PHP版本,与其他网站相互不干扰,完全满足您多版本PHP的需求,且支持主机系统一键切换。
一般而言,DEDECMS原版支持PHP5.2版,其他CMS程序请根据实际运行环境对应切换即可。
以下简单介绍不同的PHP之间的区别:
PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束
PHP5.2:JSON 支持
PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三运算符,Phar
PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改
PHP5.5:yield, list() 用于 foreach, 细节修改
PHP5.6: 常量增强,可变函数参数,命名空间增强。
一:添加处理方法,就是如何报警
打开zabbix的管理——处理方法—-create media type:
我?的是脚本发邮件的方式来报警的,脚本名字为mail.py。指的一提的是脚本存放位置,我的脚本是放在/usr/local/zabbix/bin/目录下面,在这里不写目录的据对路径,直接写脚本名字,他的路径设置是在zabbix服务器端的配置文件中设置的,在zabbix_server.conf配置文件中设置:AlertScriptsPath=/usr/local/zabbix/bin/
二:添加zabbix用户和组,设置其邮箱地址等信息
1:打开zabbix的管理——用户—选择用户组下拉—-create user group:
填写个组名,设置需要的权限直接保存就成,其他的不用填写和选择。
2:打开zabbix的管理——用户—选择用户下拉—-create user:
填写用户信息
3:添加报警介质,就是报警方式,因为是报警,【信息】那项就不用勾选,信息一般就是服务器信息发生变化时报警,这个一般没有什么意义,所以不勾选,不过你也可以选择,根据个人喜好。类型的话就是选择处理发放中的报警介质,选择你添加的。然后可以保存信息,完成添加用户(Permissions那项没有不填写)。
三:报警触发器触发的动作设置
当监控项中的触发器达到你设置的报警值之后,需要执行操作来发送邮件等动作。具体设置:
1:打开zabbix的系统配置—操作—- 选择事件源为触发器——create action:
2:触发?件设置:
3:详细操作设置,即满足触发条件之后执行什么动作,这里一般设置为发邮件之类的,设置收邮件的用户(建议每个组对应一个用户,样发邮件的时候容易设置发送对象):
四:zabbix中常用到的几个key
Zabbix的key可以理解为zabbix?命令,执行这个key可以得到相应的结果。
1:监控端口的:net.tcp.port[,3306]
/usr/local/zabbix/bin/ -s192.168.8.120 -knet.tcp.port[,3306] 返回1为192.168.8.120的端口3306存在,0为不存在
2:监控进程的:proc.num[mysqld]
/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -kproc.num[mysqld] 返回值为192.168.8.120中mysqld的进程数量
/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -kproc.num[] 返回值为192.168.8.120中所有的进程数量
3:查看CPU核数的:system.cpu.num 返回值为服务器CPU的核数
4:查看系统的系统启动时间和当前时间:system.boottime、system.localtime 返回值为系统启动时间和当前时间,为时间戳格式
5:查看系统的简单信息:system.uname 返回值为192.168.8.120的系统信息,类似于linux系统的uname -a命令
6:查看windowns系统当前网卡的进出流量:net.if.out[{HOST.NAME},bytes]、net.if.in[{HOST.NAME},bytes]和linux系统的key:net.if.out[eth0,bytes]、net.if.in[eth0,bytes]一样
/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -knet.if.in[192.168.8.120,bytes] 返回值为IP为192.168.8.120的进流量,此值为计数值,单位为bytes,减去上次取得值,除以时间间隔为此段时间内的平均流量
/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -knet.if.out[192.168.8.120,bytes] 返回值为IP为192.168.8.120的出流量,此值为计数值,单位为bytes,减去上次取得值,除以时间间隔为此段时间内的平均流量
7:查看系统内存大小:vm.memory.size[total],返回值单位bytes
8:查看文件的大小: vfs.file.size[file] 如: vfs.file.size[/var/log/syslog] 返回的是/var/log/syslog的大小,单位是:bytes
9:查看文件是否存在:vfs.file.exists[file] 文件如果存在返回0,不存在返回1
10:查看文件的MD5:vfs.file.md5sum[file]查看小文件的MD5,返回为MD5值(好像只有2.0以上的版本有这个key)
11:自动发现网卡并监控流量和自动发现分区及分区挂载情况的两个key:net.if.discovery,vfs.fs.discovery,windows和linux监控模板中都有这模板(2.0以上版本),应用即可
以上是常用的key,其实监控服务器无非就是内存、硬盘占用、CPU负载、流量、服务器和端口等情况。如果要监控其他的可以自定义key来实现,本人喜欢自定义key,写个脚本来返?,得到自己想要的监控结果,zabbix在这块做的非常好,扩展性很强,支持各种脚本来实现自定义的key。
要启用自定义key,需要在客户端的配置文件中启用UnsafeUserParameters=1参数,然后在配置文件的最下面来定义key,如:
UserParameter=free.disk,/usr/local/zabbix/bin/disk.py
free.disk为key的名字,/usr/local/zabbix/bin/disk.py为服务器端调用free.disk这个key时执行的脚本,其结果就是free.disk的返回值。脚本可以是任何可以运行的脚本语言。
五:创建监控模板和监控项
其实在zabbix服务器端安装完成之后,就有许多自带的监控模板,基本上可以满足大众化的监控需求,不过其中有许多是没有必要的监控项或是自己不感兴趣的,比较冗余,所以要做好监控的话,还是自定义模板和监控项,这个监控模板可以修改zabbix系统自带的,也可以自己创建。以下为自己创建监控模板。
1:创建监控模板:
打开zabbix的系统配置—模板—-create template:
填写模板名字和模板所在组保存即可。
2:创建监控项:
打开zabbix的系统配置—模板—选择对应模板中的监控项—create item:
3:创建监控项的触发器:
打开zabbix的系统配置—模板—选择对应模板中的触发器—create trigger:
这里说明下这个 N 值的大小
比如说我检测被监控端的httpd 进程数为9个,这时这这个N的值就可以设置为 N=9 ,
当last value 最后一次检测的值小于N,也就是小于9时,这个触发器就会被触发。
六:添加主机并应用模板
添加主机有两种方法,一个是手动添加,一个是通过zabbix的自动发现来自动添加主机。
1:手动添加主机
做完以上的设置,添加主机就是很简单的事情了。打开zabbix的系统配置—主机—create host:
在这一步,只填写主机名、显示名、agent接口中的IP地址,选择主机所在组,其他的默认。
选择模板确认并保存主机,其他的选项不需要设置,默认?可
添加完主机如下图,可用性为绿色是正常,红色为不可监控(主要是网络不通或是没有安装zabbix客户端),灰色为正在检测zabbix的状态:
2:通过自动发现自动添加主机:
打开zabbix的系统配置—自动发现—create discovery rule:
需要添加名?,ip地址段(这个地址段以覆盖你所有IP的最小地址段为好),checks。其中checks最为重要,总共三项,只填写key,这里用system.uname这个key。然后添加并保存。这里的意思是zabbix服务器端扫描这个网段中的zabbix客户端(客户端端口默认为10050),扫描到之后取客户端的system.uname值,这个值返回的类似于linux系统中的uname –a命令,值为下面形式:
这个主要用于发现主机之后把主机自动分配到相应的组(比如linux组或是windowns组)中,并且应用相应的监控模板。
当然,这个key值不一定要用system.uname,也可以用其他的key,首先zabbix客户端支持这个key,在这用这个key可以区分不同类型的主机方便分组应用监控模板。
打开zabbix的系统配置—操作——-事件源下拉选择自动发现—create action:
这几项的意思是当自动发现通过发现zabbix客户端,并且接收到key的中包含linux字符,即把他添加到linux_servers组中,应用linux_server模板。等一段时间即可查看自动发现的结果。结果可以在zabbix首页中最下面有状态,也可以在zabbix的状态统计—自动发现中查看,可以看到发现了多少,监控了多少。
Apache服务器具备强大的日志功能,管理员可以方便、准备、及时地了解服务器状况;可以更好地防范黑客的攻击。
Apache规定了4类日志,分别为:错误日志、访问日志、传输日志以及Cookie日志。其中Apache2.0默认设置的有错误日志和访问日志,如果需要分析其他日志,则需进行相关配置。
1.错误日志
错误日志是Apache服务器的标准日志文件,记录了服务器运行期间遇到的各种错误和一些服务器何时启动等的信息。
在这个文件中,管理员可以准确、清晰地看到各种错误提示:文件没找到、用户认证错误或者PHP、CGI的语法错误等。通过这些准确的错误描述,管理员就可以较为顺利地解决这些问题了。
2.配置访问日志
通过Apache的访问日志可以了解到访问服务器的相关信息,?如,有哪些人访问了服务器,都访问了哪些内容等相关信息。Apache服务器一旦启动就会自动生成访问日志(/var/log/httpd/access_log文件)
管理web网站需要监视其速度、web内容传送,服务器每天的吞吐量,和web网站的外来访问,了解网站各个页面
的访问情况,根据页面的率来改善网页的内容和质量,提高内容的可读性,跟踪包含有商业交易的步骤以及管理web网站幕后的数据;
1、日志的分类
apache的标准中规定了4类日志;
*错误日志
*访问日志
*传输日志
*cookie日志
其中传输日志和cookie日志在apache2.0时已经取消了,只讨论错误日志和访问日志;
2、日志相关配置指令;
apache中有如下4条与日志相关的配置指令;
指令 格式 说明
—————————————————————————–
ErrorLog 错误日志文件名; 指定错误日志存放路径
—————————————————————————–
LogLevel 错误日志记录等级; 指定错误日志的记录等级
—————————————————————————–
LogFormat 记录格式说明串,格式昵称; 为一个日志记录格式命名
——————————————————————————-
CustomLog 访问日志文件名 格式昵称 指定访问日志存放路径和记录格式;
“|程序名 访?日志文件名”格式昵称 指定访问日志有指定程序生成并制定格式(管道日志)
——————————————————————————-
前两条是配置错误日志,后两条是配置访问日志
3、配置错误日志;
1)、apache默认的错误日志配置
ErrorLog “logs/error_log”
LogLevel warn
配置错误日志只需要说明日?文件的存放路径和日志记录登记即可;
2)、日志记录等级;
紧急程度 等级 说明
—————————————————————–
1 Emerg 出现紧急情况时的系统不可用,如系统宕机等
——————————————————————
2 A lert 需要立即引起注意的情况
——————————————————————
3 Crit危险情况的警告
—————————————————————–
4 Error 除了emerg、alert、crit的其他错误;
————————————————————–
5 warn 警告信息
—————————————————————
6 notice 需要引起注意的情况,但不如error warn重要
——————————————————————
7 info 值得报告的一般信息
——————————————————————-
8 debug 由运行与debug模式的程序所产生的消息
—————————————————————
如果指定了登记warn,那么就记录紧急程度为1至5的所有信息;
[Fri May 07 10:32:00 2010] [error] [client 192.168.0.10] File does not exist: /usr/local/apache2/htdocs/favicon.ico
[Fri May 07 10:32:03 2010] [error] [client 192.168.0.10] File does not exist: /usr/local/apache2/htdocs/favicon.ico
每一行的错误日志都有
日期和时间 错误等级 错误消息
4、配置访问日志
1)、访问日志的分类;
为了便于分析apache的访问日志,apace的默认配置文件中,按记录的信息不同,将访问日志分为4类;并由LogFormat指令定义了昵称
格式分类 格式昵称 说明
——————————————————————–
普通日志格式 common 大多数日志分析软件都支持这种格式
(common log format.CLF)
——————————————————————–
参考日志格式 referer 记录客户访问站点的用户身份
(referer log format)
——————————————————————–
代理日志格式 agent 记录请求的用户代理
(agent log format)
——————————————————————–
综合日志格式 combined 综合以上三种日志信息
(combined log format)
——————————————————————–
由于综合日志格式简单地结合了3种日志信息,所以在配置访问日志时,要么使用3个文件分别记录,要么使用一个综合文件记录。
5、日志滚动
要使系统重新使用空的日志文件 ,可以执行如下命令
#cd /usr/loca/apache2/log
# mv error_log error_log.01
#mv access_log access_log.01
当重启apache时新的error_log和access_log
下面我们使用日志分析软件webalizer来统计
1)、安装webalizer
# yum install webalizer
# rpm -qa |grep webalizer
webalizer-2.01_10-30.1
# rpm -qa |grep webalizer
webalizer-2.01_10-30.1
[root@dns logs]# rpm -ql webalizer
/etc/cron.daily/00webalizer
/etc/httpd/conf.d/webalizer.conf
/etc/webalizer.conf
/usr/bin/webalizer
/usr/bin/webazolver
/usr/share/doc/webalizer-2.01_10
/usr/share/doc/webalizer-2.01_10/README
/usr/share/man/man1/webalizer.1.gz
/var/lib/webalizer
*生成的HTML文件存放在下面的路径
/var/www/usage
/var/www/usage/msfree.png
/var/www/usage/webalizer.png
2)、配置webalizer
#ln -s /var/www/usage /usr/local/www/usage
# webalizer /usr/local/apache2/logs/access_log
http://www.landui.com/usage
在Windows下运行最新版的Apache和php7都需要Visual C++Redistributable 2015,而之前的版本不需要那么高的,这个组件是运行Visual Studio 2015所建立的C++应用的必要组件,安装一次即可解决环境问题,那么去微软官网下载安装程序,安装一遍重启电脑即可。
下载地址:https://www.landui.com/en-US/download/details.aspx?id=48145
64位和32位两个都安上就可以。
新建记录,方法1:
$User = new UserModel() //实例化 User 对象
$User->字 段名 = 字段值 //给字段赋值
$User->add() //添加记录
新建记录,方法2:
$data[‘字段名’] = 字段值; //给字段赋值
$User = D(‘User’); //实例化 User 对象
$User->add($data); //$insertId,Add 方法的返回值就是最新插入的主键值,可以直接获取。
新增多条记录:
$User = new UserModel()
$data[0][‘name’] = ‘ThinkPHP’
$data[0][’email’] = ‘sjolzy@chen.com’
$data[1][‘name’] = ‘流年’
$data[1][’email’] = ‘chen@sjolzy.cn’
$User>addAll($data)
删除记录
$User->find(2)
$User->delete() // 删除查找到的记录
$User->delete(‘5,6’) // 删除主键为 5、6 的数据
$User->deleteAll() // 删除查询出来的所有数据
记录查询
$User->getDbFields() //获取当前数据字段
$User->findAll(); //查找所有记录
$User->findAll(‘1,3,8’) //查询主键为1,3,8的记录集
$User->count() // 获取记录数
$User->max(‘score’) // 获取用户的最大积分
$User->min(‘score’,’score>0′) // 获取积分大于 0 的用户的最小积分
$User->avg(‘字段名’) // 获取所有记录?字段值的平均值
$User->sum(‘字段名 ‘) // 统计字段值
(以下方法的使用需继承高级模型类)
$User->getN(2,array(‘score>80’)) // 返回符合条件的第 2 条记录
$User->getN(-2,array(‘score>80’)) //还可以获取最后第二条记录
$User->first(array(‘score>80′,’score desc’)) //如果要查询第一条记录,还可以使用
$User->last(array(‘score>80′,’score desc’)) // 获取最后一条记录
$User->top(5,array(‘score desc’)) // 获取积分最高的前 5 条记录
$User->getBy(‘name’,’liu21st’) //跟据字段的字段值来查询记录
$Model = new Model() // 实例化一个 model 对象 没有对应任何数据表
$Model->query(“select * from think_user where status=1”)//直接使用原生?sql语句
$objrs = $Model->query(“select * from think_user where status=1”) //自定义查询
$Model->execute(“update think_user set name=’thinkPHP’ where status=1”) //用于更新和写入数据的 sql 操作,返回影响的记录数
$User->startTrans() // 启动事务
$User->commit() // 提交事务
$User->rollback() // 事务回滚
一、简单用法
$ mount /dev/hda2 /home
第一个叁数是与包括文件系统的磁盘或分区相关的设备文件。
第二个叁数是要mount到的目录。
$ umount /dev/hda2
$ umount /usr
参数可以是设备文件或安装点。
二、mount详细介绍
如果想在运行的Linux下访问其它文件系统中的资源的话,就要用mount命令来实现。
1. mount的基本用法是?
格式:mount [-参数] [设备名称] [挂载点]
其中常用的参数有:
-a 安装在/etc/fstab文件中类出的所有文件系统。
-f 伪装mount,作出检查设备和目录的样子,但并不真正挂载文件系统。
-n 不把安装记录在/etc/mtab文件中。
-r 讲文件系统安装为只读。
-v 详细显示安装信息。
-w 将文件系统安装为可写,为命令默认情况。
-t 指定设备的文件系统类型,常见的有:
ext2 linux目前常用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 网络文件系统
iso9660 CD-ROM光盘标准文件系统
ntfs windows NT/2000/XP的文件系统
auto 自动检测文件系统
-o 指定挂载文件系统时的选项,有些也可写到在/etc/fstab中。常用的有:
defaults 使用所有选项的默认值(auto、nouser、rw、suid)
auto/noauto 允许/不允许以 –a选项进行安装
dev/nodev 对/不对文件系统上的特殊设备进行解释
exec/noexec 允许/不允许执行二进制代码
suid/nosuid 确认/不确认suid和sgid位
user /nouser 允许/不允许一般用户挂载
codepage=XXX 代码页
iocharset=XXX 字符集
ro 以只读方式挂载
rw 以读写方式挂载
remount 重新安装已经安装了的文件系统
loop 挂载回旋设备
需要注意的是,挂载点必须是一个已经存在的目录,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用,umount以后会恢复正常。使用多个-o参数的时候,-o只用一次,参数之间用半角逗号隔开:
CODE:
# mount –o remount,rw /
例如要挂载windows下文件系统为FAT32的D盘,一般而言在Linux下这个分区对应/dev/hda5,根据具体的分区情况会有不同,这里就以hda5来举例说明:
CODE:
# mkdir /mnt/hda5 //创建hda5的目录作为挂载点,位置和目录名可自定义//
# mount -t vfat /dev/hda5 /mnt/hda5
一般而言,Linux会自动探测分区的文件系统,除非让你指定时,否则-t vfat可以省掉。
CODE:
# mount /dev/hda5 /mnt/hda5
这样就可以进入/mnt/hda5目录去访问分区中的资源了。
2. 为什么mount上分区后显示不了中文文件为问号/乱码?
显 示问号表明你的系统中没有可识别使用的中文字体,请先安装中文字体。确保你的系统已经可以很好的显示中文。显示为乱码一般是mount默认使用的文件系统编码和文件系统中文件的实际编码不一致造成的。要想正常显示中文文件,mount时需要用到 -o参数里的codepage和iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或gb2312。
CODE:
# mount –o iocharset=gb2312 codepage=936 /dev/hda5 /mnt/hda5
一般来说 mount –o iocharset=cp936 /dev/hda5 /mnt/hda5就可以解决问题了。
如果这样做了以后还有问题,请尝试UTF-8编码:
CODE:
# mount –o iocharset=utf8 /dev/hda5 /mnt/hda5
3. 为什么mount上去以后分区普通用户不可写?
mount时加上 –oumask=000 即可:
CODE:
# mount –o umask=000, iocharset=cp936 /dev/hda5 /mnt/hda5
4. 为什么mount上去后的分区中的文件都变成短文件名了?
这是文件系统挂错的原因,将FAT32挂载成FAT16时就会出现这种情况,先umount,然后用–t vfat重新挂载即可解决问题。
CODE:
# mount –t vat /dev/hda5 /mnt/hda5
5. 为什么不能mount ntfs分区?
这是内核不支持NTFS文件系统的原因,请重新编译内核或者安装内核的NTFS文件系统支持包,以使得内核有NTFS文件系统的支持。
6. 如何挂载U盘和mp3?
如果计算机没有其它SCSI设备和usb外设的情况下,插入的U盘的设备路径是 /dev/sda1,用命令:
CODE:
# mkdir /mnt/u
# mount /dev/sda1 /mnt/u
挂载即可。
7. 可以直接使用iso文件吗?
可以,就是mount的这一选项使得Linux下有免费虚拟光驱的说法,具体用法是:
CODE:
# mkdir /mnt/iso
# mount –o loop linux.iso /mnt/iso
当然,挂载以后挂载点/mnt/iso也是只读的。
8. 我怎么不可以mount iso文件?
一般而言,大多数的发行版使用的内核均已将loop设备的支持编译进去了,但是也有没有的情况,所以请确保系统所使用的内核支持loop设备。
第二种情况是iso文件被放置到了NTFS或其它只读文件系统中了。挂载loop设备必须要求挂载到一个可写的分区中,目前Linux内核对NTFS文件系统的写支持非常有限,请将iso文件复制到其它可写文件系统中后再挂载。
9. 如何挂载光驱和软驱
一般来说CDROM的设备文件是/dev/hdc,软驱的设备名是/dev/fd0
CODE:
# mkdir /mnt/cdrom
# mount /dev/hdc /mnt/cdrom //挂载光驱 //
# mkdir /mnt/floppy
# mount /dev/fd0 /mnt/floppy //挂载软驱 //
10. 为何挂载的CD-ROM不能显示中文文件?
使用 –o iocharset=cp936 选项一般能解决问题,否则使用utf-8编码。
CODE:
# mount –o iocharset=cp936 /dev/hdc /mnt/cdrom
11. 如何开机自动挂载分区?
每次挂载都要输入那么长的命令的确是繁琐了些,只要将分区信息写到/etc/fstab文件中即可实现系统启动的自动挂载,例如对于/dev/hda5的自动挂载添加如下的行即可:
CODE:
/dev/hda5 /mnt/hda5 vfat defaults,iocharset=cp936, rw 0 0
12. 如何挂载samba 分区?
CODE:
# mkdir /mnt/share
# mount -t smbfs -ousername=root,password=abc,codepage=936,iocharset=gb2312//192.168.1.100/share /mnt/share
如果中文显示不正常请尝试UTF-8编码。当然可以写到fstab中实现自动挂载。
13. mount–bind是什么意思?
mount –bind 是将一个目录中的内容挂载到另一个目录上,用法是
CODE:
# mount –bind olddir newdir
这个命令使得自己搭建的FTP要共享某个目录的时候变得特别方便。如果要取消mount用命令:
CODE:
# mount –move olddir newdir 即可。
如果mount –bind 也想写入fstab中的话格式如下:
CODE:
olddir newdir none bind 0 0
三、 umount基本用法
譬如 /dev/hda5 已经挂载在/mnt/hda5上,用一下三条命令均可卸载挂载的文件系统
CODE:
# umount /dev/hda5
# umount /mnt/hda5
# umount /dev/hda5 /mnt/hda5
16. 为什么umount的时候老显示 device busy?
这是因为有程序正在访问这个设备,最简单的办法就是让访问该设备的程序退出以后再umount。可能有时候用户搞不清除究竟是什么程序在访问设备,如果用户不急着umount,则可以用:
CODE:
# umount -l /mnt/hda5
来卸载设备。选项 –l 并不是马上umount,而是在该目录空闲后再umount。还可以先用命令ps aux来查看占用设备的程序PID,然后用命令kill来杀死占用设备的进程,这样就umount的非常放心了。
apache本地域名ip重定向,使本机通过指定域名访问到指定ip路径。
1、apache配置apache/conf/httpd.conf : 开启配置 Include conf/extra/httpd-vhosts.conf
2、apache配置apache/conf/extra/httpd-vhosts.conf :
<VirtualHost *:80>
ServerAdmin webmaster@appjh51.ingenidev
DocumentRoot “D:/WWW/App_wxjh”
ServerName appjh51.com
ErrorLog “logs/appjh51.log”
CustomLog “logs/appjh51.log” common
</VirtualHost>
3、系统盘C:WindowsSystem32driversetchosts : 添加 127.0.0.1 appjh51.com
在root用户下创建一个普通测试用户test,切换到test用户,执行mkdir或者rm -rf
会出现Permission denied,错误原因是:该用户暂没有root权限
[test@iZ2513wqj05Z app]$ mkdir testmkdir: cannot create directory test? Permission denied
[test@iZ2513wqj05Z app]$
解决办法:
1:切换到root用户
[test@iZ2513wqj05Z app]$ su rootPassword: [root@iZ2513wqj05Z app]#
2 :赋予普通用户root权限
编辑/etc/sudoers配置文件,找到下面一行,在root下面添加一行,如下所示: root ALL=(ALL) ALL test ALL=(ALL) ALL 修改完毕,现在可以用test帐号登录,然后用命令 su – ,即可获得root权限进行操作。
3:退出root用户
[root@iZ2513wqj05Z app]# exitexit
[test@iZ2513wqj05Z app]$
4:执行linux命令:sudo mkdir test
[test@iZ2513wqj05Z app]$ sudo mkdir test
[sudo] password for test: [test@iZ2513wqj05Z app]$ ll
total drwxr-xr-x 2 root root 4096 Feb 17 17:14 test
CentOS系统网络抓包用tcpdump,首先当然是看有没有安装了,没有就用yum安装一下。
tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是centos 7。
tcpdump的命令格式
tcpdump的参数众多,通过man tcpdump可以查看tcpdump的详细说明,这边只列一些笔者自己常用的参数:
tcpdump [-i 网卡] -nnAX ‘表达式’
各参数说明如下:
-i:interface 监听的网卡。
-nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。
-A:以ascii的方式显示数据包,抓取web数据时很有用。
-X:数据包将会以16进制和ascii的方式显示。
表达式:表达式有很多种,常见的有:host 主机;port 端口;src host 发包主机;dst host 收包主机。多个条件可以用and、or组合,取反可以使用!,更多的使用可以查看man 7 pcap-filter。
下面进行一些命令测试,如果没有权限,可以先切换成root用户。
监听网卡eth0
$ tcpdump -i eth0
这个方式最简单了,但是用处不多,因为基本上只能看到数据包的信息刷屏,压根看不,可以使用ctrl+c中断退出,如果真有需求,可以将输出内容重定向到一个文件,这样也更方便查看。
监听指定协议的数据
$ tcpdump -i eth0 -nn ‘icmp’
这个是用来监听icmp协议的数据,就是ping命令使用的协议。类似的,如果要监听tcp或者是udp协议,只需要修改上例的icmp就可以了。ping下监听的机器,输出如下:
linux使用tcpdump抓包示例
每一行的各个数据表示的含义:
抓到包的时间 IP 发包的主机和端口 > 接收的主机和端口 数据包内容
监听指定的主机
$ tcpdump -i eth0 -nn ‘host 192.168.1.231’
这样的话,192.168.1.231这台主机接收到的包和发送的包都会被抓取。
$ tcpdump -i eth0 -nn ‘src host 192.168.1.231’
这样只有192.168.1.231这台主机发送的包才会被抓取。
$ tcpdump -i eth0 -nn ‘dst host 192.168.1.231’
这样只有192.168.1.231这台主机接收到的包才会被抓取。
监听指定端口
$ tcpdump -i eth0 -nnA ‘port 80’
上例是用来监听主机的80端口收到和发送的所有数据包,结合-A参数,在web开发中,真是非常有用。
监听指定主机和端口
$ tcpdump -i eth0 -nnA ‘port 80 and src host 192.168.1.231’
多个条件可以用and,or连接。上例表示监听192.168.1.231主机通过80端口发送的数据包。
监听除某个端口外的其它端口
$ tcpdump -i eth0 -nnA ‘!port 22’
如果需要排除某个端口或者主机,可以使用“!”符号,上例表示监听非22端口的数据包。
同时可以将数据输出到一个指定的文件
tcpdump -i em2 -vnn port 8000 -w xxx.cap
小结:
tcpdump这个功能参数很多,表达式的选项也非常多,非常强?,不过常用的功能确实不多。详情可以通过man查看系统手册。
另外在抓取web包的时候,发送网页内容都是很奇怪的字符,发现是apache开启了gzip压缩的缘故,关闭掉gzip压缩就可以了。在centos 7下,编辑vim/etc/apache2/mods-enabled/deflate.load文件,将加载模块deflate_module的语句注释掉,然后重启apache就OK了。
1、安装中文支持包:yum -y groupinstall chinese-support
2、修改文件/etc/sysconfig/i18n如下:
LANG=”zh_CN.UTF-8″
SYSFONT=”latarcyrheb-sun16″
首先找到nginx的配置文件nginx.conf
[root@localhost nginx]# vi nginx.conf
打开配置文件后找到类似下面一段:
include /etc/nginx/conf.d/*.conf;
没有的就加上,这是我的路径,你们的看实际情况改改,确保路径存在
加入这段的意思实际是把conf.d目录的以.conf结尾的配置文件都加载进来,修改后保存nginx.conf文件
然后进入conf.d目录
[root@localhost nginx]# cd /etc/nginx/conf.d/
然后把目录下面的文件都列出来:
[root@localhost conf.d]# ll
默认的话,目录下面有个default.conf文件
打开default.conf文件后如?:
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/access.log main;
root /var/www/baidu;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass http://www.landui.com;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php($|/) {
try_files $uri =404;
#rewrite ^/index.php/(.*)$ /$1 last;
fastcgi_pass unix:/var/www/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
#location ~ .php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location ~ /.ht {
# deny all;
#}
}
如果把上面的配置作为本地配置一个百度网站的设置,那么其访问的端口为默认80端口,访问地址就是:http://www.landui.com/
如果我们想用81端口配置为本地的另外一个网站的访问入口,应该怎么配置呢?
首先你需要在conf.d目录下创建一个以.conf结尾的文件,比如:google.com.conf文件,或者直接copy一个default.conf文件也可以,具体配置如下:
server {
listen 81;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/access.log main;
root /var/www/google;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass http://www.landui.com;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php($|/) {
try_files $uri =404;
#rewrite ^/index.php/(.*)$ /$1 last;
fastcgi_pass unix:/var/www/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
#location ~ .php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location ~ /.ht {
# deny all;
#}
}
保存后,重启nginx服务器
访问:http://www.landui.com:81看看是否成功吧。
注意:配置里面的目录文件一定要存在,不然无法启动nginx。
1.mkfifo /map/logs/nginx/wireless/access.log
nohup cat /map/app/nginx-1.2.2/logs/error.log | /map/app/tools/cronolog-1.7.0/sbin/cronolog /map/logs/nginx/wireless/error/%Y/%m/%d/%H.log &
nohup cat /map/logs/nginx/wireless/access.log | /map/app/tools/cronolog-1.7.0/sbin/cronolog /map/logs/nginx/wireless/%Y/%m/%d/%H.log &
注意:在启动nginx前必须先启动cronolog,否则无法启动
2.把cronolog增加到nginx启动脚本中
脚本内容如下:
#!/bin/sh
#
# Comments to support chkconfig
#
# chkconfig: 2345 77 77
# Description: Startup script for nginx webserver
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC=”nginx daemon”
NAME=nginx
DAEMON=/map/app/nginx/sbin/$NAME
CONFIGFILE=/map/app/nginx/conf/nginx.conf
PIDFILE=/map/app/nginx/logs/$NAME.pid
SERVICENAME=/etc/init.d/nginxd-map
cronolog=/map/app/tools/cronolog-1.7.0/sbin/cronolog
ErrorLog=/map/app/nginx-1.0.6/logs/error.log
AccessLog=/map/logs/nginx/wireless/access.log
##红色部分是新增加的,检测文件是否是pipe类型,启动cronolog,杀掉cronolog,很简单,但是能够实现功能
d_mkfifo(){
[ ! -p $ErrorLog ] || [ ! -p $AccessLog ] && /bin/rm $ErrorLog $AccessLog && mkfifo $ErrorLog $AccessLog
}
cronolog_start()
{
#ps -ef|grep wireless|grep -v grep |awk ‘{print $2}’|xargs kill -9
nohup cat /map/app/nginx-1.0.6/logs/error.log | $cronolog /map/logs/nginx/wireless/error/%Y/%m/%d/%H.log &
nohup cat /map/logs/nginx/wireless/access.log | $cronolog /map/logs/nginx/wireless/%Y/%m/%d/%H.log &
}
cronolog_kill()
{
ps -ef|grep wireless|grep -v grep |awk ‘{print $2}’|xargs kill -9
}
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
d_start() {
d_mkfifo
cronolog_start
$DAEMON -c $CONFIGFILE || echo -n ” already running”
}
d_stop() {
# kill -QUIT `cat $PIDFILE` || echo -n ” not running”
cronolog_kill
killall nginx || echo -n ” not running”
}
d_reload() {
kill -HUP `cat $PIDFILE` || echo -n ” can’t reload”
}
case “$1” in
start)
echo -n “Starting $DESC: $NAME”
d_start
echo “.”
;;
stop)
echo -n “Stopping $DESC: $NAME”
d_stop
echo “.”
;;
reload)
echo -n “Reloading $DESC configuration…”
d_reload
echo “reloaded.”
;;
status)
pgrep -x $NAME > /dev/null && echo $NAME (pid `pgrep $NAME`) is running… || echo “$NAME is stoped.”
;;
test|-t)
$DAEMON -t
;;
restart)
echo -n “Restarting $DESC: $NAME”
d_stop
sleep 2
d_start
echo “…done!”
;;
*)
echo “Usage: $SERVICENAME {start|stop|restart|reload|status|check}”
exit 3
;;
esac
exit 0
https://www.landui.com/configure
–prefix=/usr/local/php5.4
–with-config-file-path=/usr/local/php5.4/etc
–with-mysql
–with-mysqli
–with-iconv-dir=/usr/local/libiconv
–with-config-file-scan-dir=/usr/local/php5.4/php.d
–with-mhash=/usr
–with-icu-dir=/usr
–with-bz2
–with-curl
–with-freetype-dir
–with-gd
–with-gettext
–with-gmp
–with-imap
–with-imap-ssl
–with-jpeg-dir
–with-kerberos
–with-ldap
–with-mcrypt
–with-openssl
–without-pear
–with-pdo-mysql
–with-png-dir
–with-xmlrpc
–with-zlib
–enable-bcmath
–enable-calendar
–enable-ctype
–enable-dom
–enable-exif
–enable-ftp
–enable-gd-native-ttf
–enable-intl
–enable-json
–enable-mbstring
–enable-pcntl
–enable-session
–enable-shmop
–enable-simplexml
–enable-soap
–enable-sockets
–enable-tokenizer
–enable-wddx
–enable-xml
–enable-zip
–disable-fileinfo
–enable-fpm
访问nginx官方站点,根据系统版本和需求下载nginx的Linux packages
wget http://www.landui.com/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
rpm –ivh https://www.landui.com/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install nginx
/etc/init.d/nginx start
chkconfig nginx on
安装完成后设置防火墙允许80端口例外以便能正常对外提供web服务。
编辑/etc/sysconfig/iptables 在22端口的规则下面增加一条
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
linux下nginx的源设置请参考:
http://www.landui.com/en/linux_packages.html#stable
有时候我们需要用到zip压缩 但是WDCP服务器面板没装这个组件的话可以通过以下命令安装。
php zip的支持
wget -c http://www.landui.com/in/zip_ins.sh
chmod 755 zip_ins.sh
https://www.landui.com/zip_ins.sh
下面列出 WDCP官网提供的组件安装方法
memcache的安装
wget -c http://www.landui.com/in/memcached_ins.sh
chmod 755 memcached_ins.sh
https://www.landui.com/memcached_ins.sh
服务启动或停止
service memcached start|stop|restart
mysqli的安装
wget -c http://www.landui.com/in/mysqli_ins.sh
chmod 755 mysqli_ins.sh
https://www.landui.com/mysqli_ins.sh
pdo_mysql的安装
wget -c http://www.landui.com/in/pdo_mysql_ins.sh
chmod 755 pdo_mysql_ins.sh
https://www.landui.com/pdo_mysql_ins.sh
mysql innodb的安装
wget -c http://www.landui.com/in/mysql_innodb_ins.sh
chmod 755 mysql_innodb_ins.sh
https://www.landui.com/mysql_innodb_ins.sh
libmcrypt的安装
wget -c http://www.landui.com/in/libmcrypt_ins.sh
chmod 755 libmcrypt_ins.sh
https://www.landui.com/libmcrypt_ins.sh
一:漏洞分析
最近进行linux系统安全加固分析,进行漏洞扫描扫描分析,不扫不知道,一扫吓一跳,linux系统服务器的
OPENSSH存在3大安全漏洞,祥如下:
1:OpenSSH GSSAPI 处理远端代码执行漏洞
漏洞分类 守护进程类
危险级别 高
影响平台OpenSSH OpenSSH < 4.4
详细描述OpenSSH 4.3 之前的portable 版本存在远端代码执行漏洞. 攻击者可以利用race 无法处理特别制作
的signal handler 而导致阻断服务. 如果通过GSSAPI 认证,攻击者可以在系统上执行任意代码.
修补建议 以下措施进行修补以降低威胁: 升级至OpenSSH 4.4 或最新版本的OpenSSH. OpenSSH 4.4
released ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/
参考网址# MLIST:[openssh-unix-dev] Announce: OpenSSH 4.4 released #
URL:http://www.landui.com/?l=openssh-unix-dev&m=9160&w=2
2:OpenSSH GSSAPI认证终止信息泄露漏洞
漏洞编号000a03fa
漏洞分类 守护进程类
危险级别 中
详细描述OpenSSH portable 版本GSSAPI 认证存在信息泄露漏洞. 远端攻击者可以利用GSSAPI 认证终止回传
不同的错误讯息和确认usernames 非特定的平台进而攻击,攻击者可以获得usernames 的信息.
修补建议 升级至OpenSSH 4.4 或最新版本的OpenSSH. OpenSSH 4.4 released
http://www.landui.com/txt/release-4.4
参考网址* BUGTRAQ: rPSA-2006-0185-1 gnome-ssh-askpass openssh openssh-client openssh-
server * URL:http://www.landui.com/archive/1/archive/1//100/200/threaded
3:OpenSSH X连接会话劫持漏洞
漏洞分类 守护进程类
危险级别 中
影响平台OpenSSH < 4.3p2
详细描述 在通过启用了X11转发的SSH登录时,sshd(8)没有正确地处理无法绑定到IPv4端口但成功绑定到IPv6端
口的情况。在这种情况下,使用X11的设备即使没有被sshd(8)绑定也会连接到IPv4端口,因此无法安全的进行转
发。 恶意用户可以在未使用的IPv4端口(如tcp 6010端口)上监听X11连接。当不知情的用户登录并创建X11转
发时,恶意用户可以捕获所有通过端口发送的X11数据,这可能泄露敏感信息或允许以使用X11转发用户的权限执
行命令。
修补建议 建议您采取以下措施进行修补以降低威胁:OpenSSH已经提供更新的下载地址:# OpenSSH
openssh-3.9p1-skip-used.patch http://www.landui.com/viewcvs/rpms/openssh/devel/openssh-
3.9p1-
skip-used.patch?rev=1.1&view=markup
参考网址* BUGTRAQ: rPSA-2008-0120-1 gnome-ssh-askpass openssh openssh-client openssh-
server * URL:http://www.landui.com/archive/1/archive/1//100/0/threaded
二:漏洞修复
我的修复步骤!
通过以上的统计分析,我的第一想法就是升级OPENSSH 堵住安全漏洞,下面是我的升级方法步骤:
1
wget http://www.landui.com/pub/OpenBSD/OpenSSH/portable/openssh-5.8p2.tar.gz
现在高版本OPENSSH安装程序,现在最高版本是6.0,还是安全起见,不使用最新版本,我选择5.8P2下载安装。
2
tar xvf openssh-5.8p2.tar.gz #不解释
3
cd openssh-5.8p2 # www.landui.com 不解释
4
https://www.landui.com/configure –prefix=/usr –sysconfdir=/etc/ssh
下载的是源码包要编译一下,注意我的编译路径,我是讲OPENSSH安装在,原来的路径下,这样后面安装完成后
就不用在从新copy SSHD服务到/etc/init.d/下了!,可以根据实际情况定制安装路径。
5
make #不解释
6
mv /etc/ssh/* /etc/sshbak/
由于我使安装在原路径下,所以我将就的配置文件挪了一下位置,不然make install 会报错!
7
make install #不解释
8
/etc/init.d/sshd restart
这里注意安全,如果你前面编译报错了,还强制安装,SSHD服务可能就起不来了,后果你懂得!
9
chkconfig –add sshd #不解释
10
chkconfig sshd on #不解释
如果你的sshd服务正常启动,那么恭喜你!
使用ssh -V 命令查看一下
[health@jumpserver-12 ~]$ ssh -V
OpenSSH_5.8p2, OpenSSL 1.0.0-fips 29 Mar 2010
已经成功升级至5.8版本!
三:故障排查
故障排查:
https://www.landui.com/configure 之后报错报错排查,
安装gcc-4.5.1.tar.bz2 和openssl-devel
有时我们经常会遇到这样一些问题:有一页电话号码薄,上面按顺序规则地写着人名、家庭住址、电话、备注等,此时我们只想取出所有人的名字和其对应的电话号码,你有几种方法可以实现呢?
确实这种纵向定位的方式用常规办法难以实现,这时,cut就可以大显身手了。
What’s cut?
子曰:cut命令可以从一个文本文件或者文本流中提取文本列。
命令用法:
cut -b list [-n] [file …]
cut -c list [file …]
cut -f list [-d delim][-s][file …]
参数:
-b, –bytes=LIST
输出 这些 字节
-c, –characters=LIST
输出 这些 字符
-d, –delimiter=DELIM
使用 DELIM 取代 TAB 做 字段(field) 分隔符
-f, –fields=LIST
输出 这些 字段
-n
(忽略)
-s, –only-delimited
不显示 没有 分隔符 的 行
–output-delimiter=STRING
使用 STRING 作为 输出分隔符, 缺省 (的 输出分隔符) 为 输入分隔符
–help
显示 帮助信息, 然后 结束
–version
显示 版本信息, 然后 结束
使用 且 只使用 -b, -c 或 -f 中的 一个 选项. LIST 由 一个 范围 (range) 或 逗号 隔开的 多个 范围 组成. 范围 是 下列 形式 之一:
N
第 N 个 字节, 字符 或 字段, 从 1 计数 起
N-
从 第 N 个 字节, 字符 或 字段 直至 行尾
N-M
从 第 N 到 第 M (并包括 第M) 个 字节, 字符 或 字段
-M
从 第 1 到 第 M (并包括 第M) 个 字节, 字符 或 字段
如果 没有 指定 文件 FILE, 或 FILE 是 -, 就从 标准输入 读取 数据.
示例:
代码如下:
[root@localhost ~]# cat /etc/passwd | cut -b 1 |head -5 #输出文件的第一个字节
r
b
d
a
l
代码如下:
[root@localhost ~]# cat /etc/passwd | cut -c 1-4 |head -5 #输出文件的前四个字符
root
bin:
daem
adm:
lp:x
代码如下:
[root@localhost ~]# cat /etc/passwd | cut -f1 -d ‘:’ |head -5 #以:分割文件,输出第一个字段
root
bin
daemon
adm
lp
代码如下:
# cat a.txt
ssss affff dddd fe fsc
rrr f adfa eer ddd
代码如下:
# cat a.txt |cut -f1,3 -d $’ ‘ #1,3列
ssss dddd
rrr adfa
通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具。linux中最流行的tar是麻雀虽小,五脏俱全,功能强大。
tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可?在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通?都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩。
1.命令格式:
tar[必要参数][选择参数][文件]
2.命令功能:
用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的
3.命令参数:
必要参数有如下:
-A 新增压缩文件到已存在的压缩
-B 设置区块大小
-c 建立新的压缩文件
-d 记录文件的差别
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip解压文件
-j 支持bzip2解压文件
-Z 支持compress解压文件
-v 显示操作过程
-l 文件系统边界设置
-k 保留原有文件不覆盖
-m 保留文件不被覆盖
-W 确认压缩文件的正确性
可选参数如下:
-b 设置区块数目
-C 切换到指定目录
-f 指定压缩文件
–help 显示帮助信息
–version 显示版本信息
4.常见解压/压缩命令
tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
5.使用实例
实例1:将文件全部打包成tar包
命令:
tar -cvf log.tar log2012.log
tar -zcvf log.tar.gz log2012.log
tar –jcvf log.tar.bz2 log2012.log
输出:
[root@localhost test]# ls -al log2012.log
—xrw-r– 1 root root 11-13 06:03 log2012.log
[root@localhost test]# tar -cvf log.tar log2012.log
log2012.log
[root@localhost test]# tar -zcvf log.tar.gz log2012.log
log2012.log
[root@localhost test]# tar –jcvf log.tar.bz2 log2012.log
log2012.log
[root@localhost test]# ls -al *.tar*
-rw-r–r– 1 root root 11-29 17:54 log.tar
-rw-r–r– 1 root root 1413 11-29 17:55 log.tar.bz2
-rw-r–r– 1 root root 1413 11-29 17:54 log.tar.gz
说明:
tar -cvf log.tar log2012.log 仅打包,不压缩!
tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩
tar -zcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩
在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar包; 如果加 j 参数,则以 .tar.bz2 来作为tar包名。
实例2:查阅上述 tar包内有哪些文件
命令:
tar -ztvf log.tar.gz
输出:
[root@localhost test]# tar -ztvf log.tar.gz
—xrw-r– root/root 2012-11-13 06:03:25 log2012.log
说明:
由于我们使用 gzip 压缩的log.tar.gz,所以要查阅log.tar.gz包内的文件时,就得要加上 z 这个参数了。
实例3:将tar 包解压缩
命令:
tar -zxvf /opt/soft/test/log.tar.gz
输出:
[root@localhost test3]# ll
总计 0[root@localhost test3]# tar -zxvf /opt/soft/test/log.tar.gz
log2012.log
[root@localhost test3]# ls
log2012.log
[root@localhost test3]#
说明:
在预设的情况下,我们可以将压缩档在任何地方解开的
实例4:只将 /tar 内的 部分文件解压出来
命令:
tar -zxvf /opt/soft/test/log30.tar.gz log2013.log
输出:
[root@localhost test]# tar -zcvf log30.tar.gz log2012.log log2013.log
log2012.log
log2013.log
[root@localhost test]# ls -al log30.tar.gz
-rw-r–r– 1 root root 1512 11-30 08:19 log30.tar.gz
[root@localhost test]# tar -zxvf log30.tar.gz log2013.log
log2013.log
[root@localhost test]# ll
-rw-r–r– 1 root root 1512 11-30 08:19 log30.tar.gz
[root@localhost test]# cd test3
[root@localhost test3]# tar -zxvf /opt/soft/test/log30.tar.gz log2013.log
log2013.log
[root@localhost test3]# ll
总计 4
-rw-r–r– 1 root root 61 11-13 06:03 log2013.log
[root@localhost test3]#
说明:
我可以透过 tar -ztvf 来查阅 tar 包内的文件名称,如果单只要一个文件,就可以透过这个方式来解压部分文件!
实例5:文件备份下来,并且保存其权限
命令:
tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log
输出:
[root@localhost test]# ll
总计 0
-rw-r–r– 1 root root 0 11-13 06:03 log2014.log
-rw-r–r– 1 root root 0 11-13 06:06 log2015.log
-rw-r–r– 1 root root 0 11-16 14:41 log2016.log
[root@localhost test]# tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log
log2014.log
log2015.log
log2016.log
[root@localhost test]# cd test6
[root@localhost test6]# ll
[root@localhost test6]# tar -zxvpf /opt/soft/test/log31.tar.gz
log2014.log
log2015.log
log2016.log
[root@localhost test6]# ll
总计 0
-rw-r–r– 1 root root 0 11-13 06:03 log2014.log
-rw-r–r– 1 root root 0 11-13 06:06 log2015.log
-rw-r–r– 1 root root 0 11-16 14:41 log2016.log
[root@localhost test6]#
说明:
这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时
实例6:在 文件夹当中,比某个日期新的文件才备份
命令:
tar -N “2012/11/13” -zcvf log17.tar.gz test
输出:
[root@localhost soft]# tar -N “2012/11/13” -zcvf log17.tar.gz test
tar: Treating date `2012/11/13′ as 2012-11-13 00:00:00 + 0 nanoseconds
test/test/log31.tar.gz
test/log2014.log
test/linklog.log
test/log2015.log
test/log2013.log
test/log2012.log
test/log2017.log
test/log2016.log
test/log30.tar.gz
test/log.tar
test/log.tar.bz2
test/log.tar.gz
说明:
实例7:备份文件夹内容是排除部分文件
命令:
tar –exclude scf/service -zcvf scf.tar.gz scf/*
输出:
[root@localhost test]# tree scf
scf
|– bin
|– doc
|– lib
`— service
`— deploy
|– info
`— product
7 directories, 0 files
[root@localhost test]# tar –exclude scf/service -zcvf scf.tar.gz scf/*
scf/bin/
scf/doc/
scf/lib/
[root@localhost test]#
cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有些不同。
1.命令格式:
用法:
cp [选项]… [-T] 源 目的
或:cp [选项]… 源… 目录
或:cp [选项]… -t 目录 源…
2.命令功能:
将源文件复制至目标文件,或将多个源文件复制至目标目录。
3.命令参数:
-a, –archive 等于-dR –preserve=all
–backup[=CONTROL 为每个已存在的目标文件创建备份
-b 类似–backup 但不接受参数
–copy-contents 在递归处理是复制特殊文件内容
-d 等于–no-dereference –preserve=links
-f, –force 如果目标文件无法打开则将其移除并重试(当 -n 选项
存在时则不需再选此项)
-i, –interactive 覆盖前询问(使前面的 -n 选项失效)
-H 跟随源文件中的命令行符号链接
-l, –link 链接文件而不复制
-L, –dereference 总是跟随符号链接
-n, –no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P, –no-dereference 不跟随源文件中的符号链接
-p 等于–preserve=模式,所有权,时间戳
–preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果
可能保持附加属性:环境、链接、xattr 等
-R, -r, –recursive 复制目录及目录内的所有项目
4.命令实例:
实例一:复制单个文件到目标目录,文件在目标文件中不存在
命令:
cp log.log test5
输出:
[root@localhost test]# cp log.log test5
[root@localhost test]# ll
-rw-r–r– 1 root root 0 10-28 14:48 log.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxrwx 2 root root 4096 10-28 14:47 test3
drwxr-xr-x 2 root root 4096 10-28 14:53 test5
[root@localhost test]# cd test5
[root@localhost test5]# ll
-rw-r–r– 1 root root 0 10-28 14:46 log5-1.log
-rw-r–r– 1 root root 0 10-28 14:46 log5-2.log
-rw-r–r– 1 root root 0 10-28 14:46 log5-3.log
-rw-r–r– 1 root root 0 10-28 14:53 log.log
说明:
在没有带-a参数时,两个文件的时间是不一样的。在带了-a参数时,两个文件的时间是一致的。
实例二:目标文件存在时,会询问是否覆盖
命令:
cp log.log test5
输出:
[root@localhost test]# cp log.log test5
cp:是否覆盖“test5/log.log”? n
[root@localhost test]# cp -a log.log test5
cp:是否覆盖“test5/log.log”? y
[root@localhost test]# cd test5/
[root@localhost test5]# ll
-rw-r–r– 1 root root 0 10-28 14:46 log5-1.log
-rw-r–r– 1 root root 0 10-28 14:46 log5-2.log
-rw-r–r– 1 root root 0 10-28 14:46 log5-3.log
-rw-r–r– 1 root root 0 10-28 14:48 log.log
说明:
目标文件存在时,会询问是否覆盖。这是因为cp是cp -i的别名。目标文件存在时,即使加了-f标志,也还会询问是否覆盖。
实例三:复制整个目录
命令:
输出:
目标目录存在时:
[root@localhost test]# cp -a test3 test5
[root@localhost test]# ll
-rw-r–r– 1 root root 0 10-28 14:48 log.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxrwx 2 root root 4096 10-28 14:47 test3
drwxr-xr-x 3 root root 4096 10-28 15:11 test5
[root@localhost test]# cd test5/
[root@localhost test5]# ll
-rw-r–r– 1 root root 0 10-28 14:46 log5-1.log
-rw-r–r– 1 root root 0 10-28 14:46 log5-2.log
-rw-r–r– 1 root root 0 10-28 14:46 log5-3.log
-rw-r–r– 1 root root 0 10-28 14:48 log.log
drwxrwxrwx 2 root root 4096 10-28 14:47 test3
目标目录不存在是:
[root@localhost test]# cp -a test3 test4
[root@localhost test]# ll
-rw-r–r– 1 root root 0 10-28 14:48 log.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxrwx 2 root root 4096 10-28 14:47 test3
drwxrwxrwx 2 root root 4096 10-28 14:47 test4
drwxr-xr-x 3 root root 4096 10-28 15:11 test5
[root@localhost test]#
说明:
注意目标目录存在与否结果是不一样的。目标目录存在时,整个源目录被复制到目标目录里面。
实例四:复制的 log.log 建立一个连结档 log_link.log
命令:
cp -s log.log log_link.log
输出:
[root@localhost test]# cp -s log.log log_link.log
[root@localhost test]# ll
lrwxrwxrwx 1 root root 7 10-28 15:18 log_link.log -> log.log
-rw-r–r– 1 root root 0 10-28 14:48 log.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxrwx 2 root root 4096 10-28 14:47 test3
drwxrwxrwx 2 root root 4096 10-28 14:47 test4
drwxr-xr-x 3 root root 4096 10-28 15:11 test5
说明:
那个 log_link.log 是由 -s 的参数造成的,建立的是一个『快捷方式』,所以您会看到在文件的最右边,会显示这个文件是『连结』到哪里去的!
mono是一个linux下兼容.net的软件。安装之前要把开发?装好
源码安装mono
wget http://www.landui.com/sources/mono/mono-4.0.3.20.tar.bz2
tar -jxf mono-4.0.3.20.tar.bz2
https://www.landui.com/configure –prefix=/usr/local/mono
make && make install
ln -s /usr/local/mono/bin/mono /bin/
mono -V 查看版本
Mono JIT compiler version 4.0.3 (Stable 4.0.3.20/d6946b4 Wed Aug 3 14:16:20 CST 2016)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.landui.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
开1、includes/fckeditor/fckconfig.js文件
找到这样的:
FCKConfig.LinkUpload = true ;
FCKConfig.LinkUploadURL = FCKConfig.BasePath + ‘filemanager/connectors/’ + _QuickUploadLanguage + ‘/upload.’ + _QuickUploadExtension ;
FCKConfig.LinkUploadAllowedExtensions = “.(7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip)$” ; // empty for all
FCKConfig.LinkUploadDeniedExtensions = “” ; // empty for no one
//phpfensi.com
在FCKConfig.LinkUploadAllowedExtensions的后面的括号中加上你要上传的文件后缀.
2、打开includes/fckeditor/editor/filemanager/connectors/php/config.php文件,找到:
$Config[‘AllowedExtensions’][‘File’] = array(‘7z’, ‘aiff’, ‘asf’, ‘avi’, ‘bmp’, ‘csv’, ‘doc’, ‘fla’, ‘flv’, ‘gif’, ‘gz’, ‘gzip’, ‘jpeg’, ‘jpg’, ‘mid’, ‘mov’, ‘mp3’, ‘mp4’, ‘mpc’, ‘mpeg’, ‘mpg’, ‘ods’, ‘odt’, ‘pdf’, ‘png’, ‘ppt’, ‘pxd’, ‘qt’, ‘ram’, ‘rar’, ‘rm’, ‘rmi’, ‘rmvb’, ‘rtf’, ‘sdc’, ‘sitd’, ‘swf’, ‘sxc’, ‘sxw’, ‘tar’, ‘tgz’, ‘tif’, ‘tiff’, ‘txt’, ‘vsd’, ‘wav’, ‘wma’, ‘wmv’, ‘xls’, ‘xml’, ‘zip’) ;
在里面加上你要上传文件的后缀.
如果是上传Flash出现这样的问题那就找到:
$Config[‘AllowedExtensions’][‘Flash’] = array(‘swf’,’fla’) ;
在里面加上上传的文件类型,修改这个就需要更换播放插件了.
当发现上网速度变慢时,人们通常会先首先测试自己的电脑到网络服务提供商(通常被称为“最后一公里”)的网络连接速度。在可用于测试宽带速度的网站中,Speedtest.net也许是使用最广泛的。
Speedtest.net的工作原理并不复杂:它在你的浏览器中加载JavaScript代码并自动检测离你最近的Speedtest.net服务器,然后向服务器发送HTTP GET and POST请求来测试上行/下行网速。
但在没有图形化桌面时(例如,当你通过命令行远程登陆服务器或使用没有图形界面的操作系统),基于flash、界面友好的Speedtest.net将无法工作。幸运的是,Speedtest.net提供了一个命令行版本——speedtest-cli。下面我将向你演示如何在Linux的命令行中使用speedtest-cli来测试宽带连接速度。
安装speedtest-cli
speedtest-cli是一个用Python编写的轻量级Linux命令行工具,在Python2.4至3.4版本下均可运行。它基于Speedtest.net的基础架构来测量网络的上/下行速率。安装speedtest-cli很简单——只需要下载其Python脚本文件。
使用speedtest-cli测试网速
使用speedtest-cli命令也很简单,它不需要任何参数即可工作。
结果如上图所示,我的这个是2M的带宽,基本都是正常的,如果您还有其他疑问欢迎咨询蓝队网络24小时在线 ,蓝队网络祝您生活愉快!
在fasgcgi模式下,php会启动多个php-fpm进程,来接收nginx发来的请求,那是不是进程越多,速度就越快呢?这可不一定!得根据我?的机器配置和业务量来决定。
我们先来看下,设定进程的配置在哪里?
pm = static | dynamic | ondemand
pm可以设置成这样3种,我们用的最多的就上前面2种。
pm = static 模式
pm = static 表示我们创建的php-fpm子进程数量是固定的,那么就只有pm.max_children = 50这个参数生效。你启动php-fpm的时候就会一起全部启动51(1个主+50个子)个进程,颇为壮观。
pm = dynamic 模式
pm = dynamic模式,表示启动进程是动态分配的,随着请求量动态变化的。他由 pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers 这几个参数共同决定。
pm.max_children = 50 是最大可创建的子进程的数量。必须设置。这里表示最多只能50个子进程。
pm.start_servers = 20 随着php-fpm一起启动时创建的子进程数目。默认值:min_spare_servers + (max_spare_servers – min_spare_servers) / 2。这里表示,一起启动会有20个子进程。
pm.min_spare_servers = 10
设置服务器空闲时最小php-fpm进程数量。必须设置。如果空闲的时候,会检查如果少于10个,就会启动几个来补上。
pm.max_spare_servers = 30
设置服务器空闲时最大php-fpm进程数量。必须设置。如果空闲时,会检查进程数,多于30个了,就会关闭几个,达到30个的状态。
到底选择static还数dynamic?
很多人恐惧症来袭,不知道选什么好?
一般原则是:动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗。
如果你的内存很大,有8-20G,按照一个php-fpm进程20M算,100个就2G内存了,那就可以开启static模式。如果你的内存很小,比如才256M,那就要小心设置了,因为你的机器里面的其他的进程也算需要占用内存的,所以设置成dynamic是最好的,比如:pm.max_chindren = 8, 占用内存160M左右,而且可以随时变化,对于一半访问量的网站足够了。
我们有时候会经常饱受500,502问题困扰。当nginx收到如上错误?时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。
这个时候,我们是可以开启慢日志功能的。
slowlog = /usr/local/var/log/php-fpm.log.slow request_slowlog_timeout = 15s
当一个请求该设置的超时时间15秒后,就会将对应的PHP调用堆栈信息完整写入到慢日志中。
php-fpm慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长:
[21-Nov-2013 14:30:38] [pool www] pid 11877script_filename = /usr/local/lnmp/nginx/html/www.landui.com/www/fyzb.php[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.landui.com/www/fyzb.php:2
通过日志,我们就可以知道第2行的file_get_contents 函数有点问题,这样我们就能追踪问题了。
+
环境:Parallel Desktop 10 , centos 7.系统安装好后,安装Parallels Tools 图形界面安装提示成功,重启后无法进入桌面。命令安装也是如此!网上找了多种方案皆是失败,还好用了快照功能,省得重新安装系统!
解决方法:Parallel Desktop升级到11 .centos 7虚拟机不变 。
1.装载 Parallels Tools 安装镜像 prl-tools-lin.iso但图形界面安装提示失败
2.挂载 Parallels Tools 安装镜像
[root@localhost yum.repos.d]# cd /media/[root@localhost media]# ls
注:此时 /media/ 文件夹下为空
[root@localhost media]# mkdir cdrom[root@localhost media]# lscdrom
注:此时 /media/ 文件夹下有 cdrom 文件夹
[root@localhost yum.repos.d]# mount -o exec /dev/cdrom /media/cdrommount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost media]# cd cdrom/[root@localhost cdrom]# lsinstall installer install-gui kmods tools version
至此,Parallels Tools 安装镜像挂载成功。
3.
安装 Parallels Tools
[root@localhost cdrom]# https://www.landui.com/install
会提示自动下载更新文件,根据网络时间稍等一会儿,提示安装成功。重启即可
mono是一个在linux下兼容.net的软件。安装之前要把开发包装好
源码安装mono
wget http://www.landui.com/sources/mono/mono-4.0.3.20.tar.bz2
tar -jxf mono-4.0.3.20.tar.bz2
https://www.landui.com/configure –prefix=/usr/local/mono
make && make install
ln -s /usr/local/mono/bin/mono /bin/
mono -V 查看版本
Mono JIT compiler version 4.0.3 (Stable 4.0.3.20/d6946b4 Wed Aug 3 14:16:20 CST 2016)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.landui.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
1、源码包准备:
首先到官网下载jdk,http://www.landui.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html,我?载jdk-7u45-linux-x64.tar.gz,下载到主目录
2、解压源码包
通过终端在/usr/local目录下新建java文件夹,命令行:
sudo mkdir /usr/local/java
然后将下载到压缩包拷贝到java文件夹中,命令行:
进入jdk源码包所在目录
cp jdk-7u45-linux-x64.tar.gz /usr/local/java
然后进入java目录,命令行:
cd /usr/local/java
解压压缩包,命令行:
sudo tar xvf jdk-7u45-linux-x64.tar.gz
然后可以把压缩包删除,命令行:
sudo rm jdk-7u45-linux-x64.tar.gz
3、设置jdk环境变量
这里采用全局设置方法,就是修改etc/profile,它是是所有用户的共用的环境变量
sudo gedit /etc/profile
打开之后在末尾添加
export JAVA_HOME=/usr/local/java/jdk1.7.0_45
export JRE_HOME=/usr/local/java/jdk1.7.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin: $PATH
请记住,在上述添加过程中,等号两侧不要加入空格,不然会出现“不是有效的标识符”,因为source /etc/profile 时不能识别多余到空格,会理解为是路径一部分。
然后保存
source /etc/profile
使profile生效
4、检验是否安装成功
在终端
java -version
看看是否安装成功
成功则显示如下
java version “1.7.0_45”
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资?,服务器返回的HTTP状态码等重要信息。
一条典型的Web访问日志如下:
192.168.50.195 – – [17/Jun/2016:23:59:12 +0800] “GET / HTTP/1.1” 304 0 “-” “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36” “-“1
1、 要解决问题:
当网站访问量大后,日志数据就会很多,如果全部写到一个日志文件中去,文件会变得越来越大。文件大速度就会慢下来,比如一个文件几百兆。写入日志的时候,会影响操作速度。另外,如果我想看看访问日志,一个几百兆的文件,下载下来打开也很慢。
注意:使用第三方免费的日志分析工具-日志宝,可以上传nginx、apache、iis的日志文件,它们帮助分析网站安全方面。毕竟专攻,更加专业。日志宝对上传的文件也是做了大小限制的,不超过50m。
2、日志自动切割脚本编写
nignx没有自动分开文件存储日志的机制。由于nginx它不会帮你自动分文件保存。所以,需要自己编写脚本来实现。
#!/bin/bash# Program:# Auto cut nginx log script.# 2016/6/15 luozhibo # nginx日志路径 /var/log/nginx/LOGS_PATH=/var/log/nginx
TODAY=$(date -d ‘today’ +%Y-%m-%d)#echo $TODAY# 移动日志并改名mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${TODAY}.log
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${TODAY}.log# 向nginx主进程发送重新打开日志文件的信号kill -USR1 $(cat /var/run/nginx.pid)
上面shell脚本的原理是:
先把以前的日志文件移动重命名,目的是就是备份。
3、crontab自动任务配置
直接编写vim /etc/crontab 或者 直接通过echo写入自动任务
echo ’59 23 * * * root /var/log/nginx/nginx_log_division.sh >> /var/log/nginx/cutnginxlog.log 2>&1′ >> /etc/crontab
每晚23:59分自动执行计划任务 以root用户身份运行 将自动任务的执行日志(错误和正确的日志)自动写入cutnginxlog.log “命令 >> 2>&1” 表示以追加方式将正确输出和错误输出都保存到同一个文件中
nginx压力测试方法:
#ab命令
#安装ab
#Centos系统
yum install apr-util
#Ubuntu系统
sudo apt-get install apache2-utils
#ab命令的参数
-n //在测试会话中所执行的请求个数。默认为1
-c //一次产生的请求个数。默认为1
-t //测试所进行的最大秒数。默认值为50000
-p //包含了需要的POST的数据文件
-T //POST数据所使用的Content-type头信息
#实例
ab -c 1000 -n 5000 http://www.landui.com/
每次发送1000并发的请求数,请求数总数为5000。
——————————————————————————
#nginx防止被压力测试的设置方法:
#限制同一IP并发数最大为10
vim /etc/nginx/nginx.conf
http{}字段第一行添加:
limit_conn_zone $binary_remote_addr zone=one:10m;
vim /etc/nginx/conf.d/default
server{}字段添加:
limit_conn one 10;
#重启nginx
service nginx restart
#如出现这种错误提示,表明nginx.conf中的limit_conn_zone $binary_remote_addr zone=one:10m;
#没有添加到正确的区域,最后添加在http字段的第一行。
the size of shared memory zone “one” conflicts with already declared size
301永久跳转,当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息中的状态码的一种,表示本网页永久性转移到另一个地址。
302临时跳转,也是状态码的一种,意义是暂时转向到另外一个网址。
二者的区别主要是,一句话,302容易被搜索引擎视为spam,301则不会。
nginx官方rewrite文档:
nginx与apache规则区别不大,本代码实现lanyingblog.com跳转到www.landui.com,以避免搜索引擎分散权重。
if ($host != 'www.landui.com') { rewrite ^/(.*)$ http://www.landui.com/$1 permanent; }
添加在conf配置文件内即可,一般我与伪静态的配置放在一起。代码中判断,非www.landui.com的,就自动跳转到www.landui.com,permanent代表301永久跳转,改为redirect则为302临时跳转。
一、系统禁止ping
[root@linu* ~]# echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
?
二、系统允许ping
[root@linu* ~]# echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
此上两条命令的效果实时生效,可以用另外的机器ping来测试是否生效。
也可以在
/etc/rc.d/rc.local中增加一行
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
0表示允许
1表示禁?
为什么要关闭SELINUX
原因有几个。
1. 麻烦确实是一个因素
2. 圈子里的人都会关掉它,我们看到的文章,书里,?用SELinux的真的非常少。因为关掉它造成的损失可以有解释说别人也是这么做的
3. 不确定性,因为一直没有搞过,然后所有的软件的文档里也没有写SELinux相关的配置,遇到相关问题时不好解决
那么如何关掉SELINUX
#修改配置文件
-
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
#使配置立即生效
-
setenforce 0
window下使用Xmanager 远程连接Centos6.5
上下文:租了一台阿里云的服务器,系统centos6.5,现在可以用 SecureCRT命令来控制,想要实现像windows 远程桌面类似的可视化连接。
两个步骤
一、 配置服务器
#1 使用命令: yum install xdm 安装xdm, 通过xdmcp支持来管理x显示器集合
#2 修改 /etc/X11/xdm/Xaccess文件, 找到下面语句:# * #any host can get a login window,
去掉这一行最前面的#号,成为:* #any host can get a login window
#3 修改/etc/gdm/custom.conf文件。
找到下面的语句:[xdmcp],在这句下面加上以下两行:
Enable=true
Port=177
在[security]下面添加
AllowRemoteRoot=true
#4 在防火墙中开启 177端口;修改/etc/sysconfig/iptables文件,
在 -A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT这一行下面增加下面两行
-A INPUT -m state –state NEW -m tcp -p tcp –dport 6000:6010 -j ACCEPT
-A INPUT -m state –state NEW -m udp -p udp –dport 177 -j ACCEPT
重启 防火墙(service iptables restart)就可以体验远程连接linux 桌面了。(不行可以再重启centos试试)
二、 安装Xmanager
下载安装Xmanager (我用的是 Xmanager enterprise 5)
安装完成之后就很简单了,贴张图大家一看便知
然后你就可以像用window远程桌面一样,可视化面管理你的centos 云服务器了。
在安装rabbitt之前,要安装erlang开发环境
1.安装erlang
1.Erlang安装配置
下载安装包,地址http://www.landui.com/downloads,我选择的是otp_src_18.3.tar.gz。
然后解压文件:
[root@iZ25e3bt9a6Z rabbitmq]# tar -xzvf otp_src_18.3.tar.gz
[root@iZ25e3bt9a6Z rabbitmq]# cd otp_src_18.3/
配置安装路径编译代码:
[root@iZ25e3bt9a6Z otp_src_18.3]# https://www.landui.com/configure –prefix=/opt/erlang
? 执行编译结果:
[root@iZ25e3bt9a6Z otp_src_18.3]# make && make install
完成后进入/opt/erlang查看执行结果
[root@iZ25e3bt9a6Z rabbitmq]# cd /opt/erlang/
[root@iZ25e3bt9a6Z erlang]# erl
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.3 (abort with ^G)
1>
当出现以上信息时表示安装完成。然后输入’halt().’退出即可。
然后在配置Erlang环境变量,vi /etc/profile文件,增加下面的环境变量:
#set erlang environment
export PATH=$PATH:/opt/erlang/bin
source /etc/profile使得文件生效
在安装Erlang过程中,可能会遇到以下问题,一般都是因为系统中缺少相应的包引起的?缺少什么包直接yum安装即可。
在此过程中,可能会出现这样的一个问题: Makefile:231: /root/otp_src_R15B/make/x86_64-unknown-linux-gnu/otp_ded.mk: No such file
解决的办法是这样的: 参照 http://www.landui.com/huoyunshen88/article/details/
2.安装rabbitmq
rpm –import http://www.landui.com/rabbitmq-signing-key-public.asc (貌似是导入什么签名)
wget https://www.landui.com/releases/rabbitmq-server/v3.6.2/rabbitmq-server-3.6.2-1.noarch.rpm
yum install rabbitmq-server-3.6.2-1.noarch.rpm
安装插件:
rabbitmq-plugins enable rabbitmq_management
service rabbitmq-server restart
由于guest这个用户,只能在本地访问,所以我们要新增一个用户并赋予权限:
添加用户:rabbitmqctl add_user admin admin
添加权限:rabbitmqctl set_permissions -p “/” admin “.*” “.*” “.*”
修改用户角色rabbitmqctl set_user_tags admin administrator
然后就可以远程访问了,然?可直接配置用户权限等信息。
到此,就可以通过http://www.landui.com:15628 使用admin admin 进行登陆了
1. 2008
控制面板->查看事件日志->事件查看器(本地)->Windows日志->安全。
在右边的列表中就可以看到日志了。
其中事件ID为4776的可以看到登录的源工作站即计算机名。
2.2003
windows2003查看远程登录日志的地方基本上跟上面的地方类似,windows2003下是查看 事件ID为528的条目中的”源网络地址“后边的ip地址,该ip地址即为 登陆本机的windows 客户端的ip地址。
方法有两种:
1、编辑组策略
打开“开始”-“运行”,在“打开”一栏中输入“gpedit.msc”命令打开组策略编辑器,依次展开“计算机配置”→“管理模板”→“系统”,双击右侧窗口出现的“显示‘关闭事件跟踪程序’”,将“未配置”改为“已禁用”即可。
2、修改注册表
打开“开始”→“运行”,在“运行”一栏中输入“Regedit”命令打开注册表编辑器,依次打开HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT,新建一个项,将其取名为“Reliability”,而后在右侧窗口中再新建一个DWORD值,取名为“ShutdownReasonOn”,将它的值设为0就可以了。
<httpErrors errorMode=”DetailedLocalOnly” defaultResponseMode=”File” >
<remove statusCode=”404″ />
<error statusCode=”404″ path=”404.htm” />
</httpErrors>
Linux CentOS系统下如何将PHP和mysql命令加入到环境变量中
在Linux CentOS系统上 安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时时,则会提示命令不存在的错误,下面我们详细介绍一下在linux下将php和mysql?入到环境变量中的方法(假 设php和mysql分别安装在/usr/local/webserver/php/和/usr/local/webserver/mysql/中)。
使用这种方法,只会对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效,只是临时生效。
这种方法只对当前登录用户生效
方法三:修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码
最后:执行 命令source /etc/profile或 执行点命令 https://www.landui.com/profile使其修改生效,执行完可通过echo $PATH命令查看是否添加成功。
当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。
-
df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。
-
du可以查看文件及文件夹的大小。
两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结。
下面分别简要介绍
df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子:
以下是代码片段:
df -h
上面的命令输出的第一个字段(Filesystem)及最后一个字段(Mounted on)分别是档案系统及其挂入点。我们可以看到 /dev/sda1 这个分割区被挂在根目录下。
接 下来的四个字段 Size、Used、Avail、及 Use% 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百?比。 FreeBSD 下,当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还 是可以写东西到该档案系统中,以进行管理。
du:查询文件或文件夹的磁盘使用空间
如果当前目录下文件和 文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参 数:–max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小.
提醒:一向命令比Linux复杂的FreeBSD,它的du命令指定深入目录的层数却是比linux简化,为 -d。
以下是代码片段:
-
du 统计文件大小相加
-
df 统计数据块使用情况
如果有一个进程在打开一个大文件的时候,这个大文件直接被rm 或者mv掉,则du会更新统计数值,df不会更新统计数值,还是认为空间没有释放。直到这个打开大文件的进程被kill掉。
如此一来在定期删除 /var/spool/clientmqueue下面的文件时,如果没有杀掉其进程,那么空间一直没有释放。
使用下面的命令杀掉进程之后,系统恢复。
由于CentOS6的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compression not available问题。
解决方法:
1.到http://www.landui.com/Linux/fedora/epel/下载epel-release-latest-6.noarch.rpm
2.卸载epel-release-latest-7.noarch.rpm:yum remove epel-release
3.清空epel目录:rm -rf /var/cache/yum/x86_64/6/epel/
4.安装epel6:rpm -ivh epel-release-latest-6.noarch.rpm
我们可以通过修改Apache配置文件httpd.conf来实现显示文件目录列表,代码如下:
DocumentRoot “D:WWW”
Options Indexes
AllowOverride All
Order allow,deny
IndexOptions Charset=UTF-8
Allow from all
注意:”D:WWW”是网站的根目录,参数”Options Indexes”表示启用目录浏览,”IndexOptions Charset=UTF-8″设置字符集,以消除中文乱码。
如果是添加的虚拟主机站点,加在虚拟主机配置文件vhosts.conf内修改以下代码:
Options Indexes
AllowOverride All
Order allow,deny
IndexOptions Charset=UTF-8
Allow from all
其中”D:www.landui.com”为所添加虚拟主机站点的根目录,”Options Indexes”表示启用目录浏览。
修改好,保存,重启Apache服务,就可以了,如下图:
apache无法启动提示the requested operation has failed 的错误信息,有以下几种解决方法:
1.80端口占用
apache默认使用的端口是80,而IIS和迅雷用的也是80端口。
2.软件冲突
装了某些软件会使apache无法启动如Dr.com 打开网络连接->TcpIp属性->高级->WINS标签 把netbios的lmhosts对勾去掉,禁用tcp/ip的netbios. 然后再启动应该就可以了。
3.httpd.conf配置错误
apache的配置文件httpd.conf出错,在windows里启动它,会提示the requested operation has failed。解决方法:用命令行模式启动apache,并带上参数,apache会提示你哪句有误,然后就可以针对性的解决,命令如下: httpd.exe -w -n “Apache2” -k start
1、下载
exfat支持是通过fuse模块的方式支持的,其项目地址是: https://www.landui.com/p/exfat/ ,当前版本是:1.0.1。
目前exfat的支持已经是全功能支持,支持读写。
可以下载源代码包,并自行使用scons和gcc编译,也可以在rpmfusion下载源代码RPM,然后通过构建RPM来安装。这里采用构建RPM的方式(这样安装卸载都很方便)。
下载地址:http://www.landui.com/free/el/updates/6/SRPMS/repoview/index.html
分别下载:fuse-exfat-1.0.1-1-el6.src.rpm 和 exfat-utils-1.0.1-1.el6.src.rpm
2、安装编译
编译前,请先检查系统,如果系统中没有scons和gcc,请通过yum安装:
$ sudo yum install scons gcc
这个软件是fuse模块,编译需要fuse-devel包支持:
$ sudo yum install fuse-devel
下载后,安装源代码RPM:
$ rpm -ivh fuse-exfat-1.0.1-1-el6.src.rpm exfat-utils-1.0.1-1.el6.src.rpm
在主目录下,会出现rpmbuild目录:
$ cd ~/rpmbuild/SPECS
$ rpmbuild -ba fuse-exfat.spec
$ rpmbuild -ba exfat-utils.spec
构建完成后,即可在 ~/rpmbuild/RPMS里面找到生成的RPM(根据系统架构,分别在x86_64或i386目录下,其中名字中带有debuginfo的包不必安装):
$ cd ~/rpmbuild/RPMS/x86_64
$ sudo rpm -ivh fuse-exfat-1.0.1-1.el6.x86_64.rpm exfat-utils-1.0.1-1.el6.x86_64.rpm
这样就安装完成了。
3、挂载:
使用fdisk -l查看U盘的设备名:
$ fdisk -l
通过以下命令来挂载exfat的U盘:
$ sudo mount.exfat /dev/sdXn /mnt
其中sdXn中的X代表你的U盘设备名,n代表分区号,比如:/dev/sdb1这样。
此外,为了方便,你可以将以上安装在/usr/sbin下的命令在/sbin下做个符号链接:
$ sudo ln -s /usr/sbin/mount.exfat /sbin/mount.exfat
便于直接使用mount来安装:
$ sudo mount -t exfat /dev/sdXn /mnt
这样就安装完成了。
4、挂载FAT32:
1:查看存储位置
root@wgods ~]# fdisk -l | grep FAT32
/dev/sdb1 * 56 640 c W95 FAT32 (LBA)
2:在mnt目录下先建立一个usb的目录(其他位置也行)
[root@wgods ~]# cd /mnt/
[root@wgods mnt]# mkdir usb
3:挂载U盘
[root@wgods mnt]# mount -t vfat /dev/sdb1 /mnt/usb
稍微解释一下。首先执行”ps aux”命令获取所有系统进程的状态信息,包括CPU,内存等,然后通过管道将信息传送给grep,$就是正则表达式结尾的意思,从所有的进程中找到以“mysqld”结尾的进程,其实就是mysql啦,这里返回的是mysql进程的信息,一行。
接下来的一个cut是截断字符串,我们要统计的是CPU的占用率,当然要截取mysql的CPU数值,cut命令默认是用tab分割的,但是ps aux显示的字符串中的空白是空格而不是tab,我们就要用空格来分割,有的字符串之间是多个空格,这里的 -f8 参数就是截取第8个字符串(有的系统可能是第6个),这个字符串就是mysql的CPU占用率啦!
也许你会有疑问,既然已经得到mysql的CPU占用率了,为什么后面还有一个cut?问的好!我当初也没想到这个问题。因为我们要比较CPU的占用率 嘛,这里我们取得的字符串是一个浮点数(带小数点的),但是shell编程里面是不支持浮点数比较大小的。怎么办?那就比较整数呗,以“.”分割这个浮点 数,第一个就是整数部分,这样我们就取得了mysql占用率的整数部分。
后面就是一个判断,如果大于300的话就就重启mysql服务。后面还有一个命令,这个命令是一个简单的“日志”,目的就是当重启一次服务就记录一下重启mysql的时间,便于以后分析网站的压力情况。
接下来就是定期执行这个程序了,根据情况可以5分钟或者10分钟执行一次,只要编辑 /etc/crontab文件,加入如下语句:
?
网关服务器安全策略
目标 : 网关服务器系统自生安全策略,只对内网用户开放22端口(sshd服务)
说明: 防火墙的策略顺序一般都是 从 非信任 ==> 信任,默认关闭所有访问权限,然后按照需要逐条开放访问权限.
共享上网(nat)
目标:使局域网的用户都可以访问外网的服务器
说明: SNAT 和 MASQUERADE 区别
SNAT : 不管是几个地址,必须明确的指定要SNAT的ip,适合网关服务器有固定地址或者是固定地址范围. MASQUERADE : 是针对ADSL动态拨号这种场景而设计,从服务器的网络接口上,自动获取当前ip地址来做NAT,这样就实现了动态SNAT地址转换
内网的服务器对外服务(端口映射)
目标:使外网用户可以访问到局域网192.168.138.21这台HTTP服务
在网关服务器进行透明代理
目标: 使局域网用户,访问外网web服务时,自动使用squid作web透明代理服务器。
使用ssh客户端(如:putty)连接Linux服务器,可能会等待10-30秒才有提示输入密码,严重影响工作效率。登录很慢,登录上去后速度正常,这种情况主要有两种可能的原因:
1. DNS反向解析问题
OpenSSH在用户登录的时候会验证ip,它根据用户的IP使用反向DNS找到主机名,再使用DNS找到IP地址,最后匹配一下登录的IP是否合法。如果客户机的IP没有域名,或者DNS服务器很慢或不通,那么登录就会很花时间。
解决办法:
在目标服务器上修改sshd服务器端配置,并重启sshd
2. 关闭ssh的gssapi认证
用ssh -v user@server 可以看到登录时有如下信息:
注:ssh -vvv user@server 可以看到更细的debug信息
解决办法:
修改sshd服务器端配置
可以使用ssh -o GSSAPIAuthentication=no user@server登录
GSSAPI ( Generic Security Services Application Programming Interface) 是一套类似Kerberos 5的通用网络安全系统接口,该接口是对各种不同的客户端服务器安全机制的封装,以消除安全接口的不同,降低编程难度,但该接口在目标机器无域名解析时会有问题,使用strace查看后发现,ssh在验证完key之后,进行authentication gssapi-with-mic,此时先去连接DNS服务器,在这之后会进行其他操作。
linux是一个很能自动产生文件的系统,日志、邮件、备份等。如果时间长了不进行设置磁盘满了就会导致服务器运行。所以设置删除脚本。
语句写法:
find 对应目录 -mtime +天数 -name “文件名” -exec rm -rf {} ;
例1:
find /usr/local/backups -mtime +10 -name “*.*” -exec rm -rf {} ;
将/usr/local/backups目录下所有10天前带”.”的文件删除
find:linux的查找命令,用户查找指定条件的文件
/usr/local/backups:想要进行清理的任意目录
-mtime:标准语句写法
+10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件
“*.*”:希望查找的数据类型,”*.jpg”表示查找扩展名为jpg的所有文件,”*”表示查找所有文件,这个可以灵活运用,举一反三
-exec:固定写法
rm -rf:强制删除文件,包括目录
{} ; :固定写法,一对大括号+空格++;
若嫌每次手动执行语句太麻烦,可以将这小语句写到一个可执行文件中,再设置cron调度执行,那就可以让系统自动去清理相关文件。
例2:
1.#touch /usr/local/bin/clear
#chmod 777 clear
新建一个可执行文件clear
2.vi clear
编辑clear文件如下:
#!/bin/sh
find /usr/local/backups -mtime +10 -name “*.*” -exec rm -rf {} ;
ok,保存退出
3.#crontab -e
将clear文件加入到系统计划任务,到点自动执行
输入:
* 2 * * */usr/local/bin/clear
这里的设置是每天凌晨2点执行clear文件进行数据清理,可以研究一下cron,制定自己需要的计划任务
示例:
#!/bin/sh
find /usr/local/jboss-4.2.3.GA/server/default/log -mtime +6 -name "server.log.*" -exec rm -rf {} ;
exit
[root@web3 ~]# crontab -l
* 2 * * * sh /root/AutoDelLog.sh
MySQL的最大连接数默认是100
客户端登录:mysql -uusername -ppassword
设置新的最大连接数为200:mysql> set GLOBAL max_connections=200
显示当前运行的Query:mysql> show processlist
显示当前状态:mysql> show status
退出客户端:mysql> exit
查看当前最大连接数:mysqladmin -uusername -ppassword variables |find “max_con”
如:
C:mysqlin>mysqladmin -uroot -p variables | find “max_con”
Enter password:
| max_connections | 100
| max_connect_errors | 10
这篇文章主要介绍了MySQL Sleep连接过多问题解决方法,MySQL Sleep连接过多一般多为客户端没关闭连接导致的,解决方法很简单,修改一下配置文件即可,需要的朋友可以参考下
有时候你在mysql中运行SHOW PROCESSLIST;后会发现数据库中有很多这样的进程:
那么造成sleep的原因,有三个,下面是mysql手册给出的解释:
1.客户端程序在退出之前没有调用mysql_close().[写程序的疏忽,或者数据库的db类库没有自动关闭每次的连接。。。]
2.客户端sleep的时间在wait_timeout或interactive_timeout规定的秒内没有发出任何请求到服务器. Navicat for Premium 9.0.2激活 [类似常连,类似于不完整的tcp ip协议构造,服务端一直认为客户端仍然存在?有可能客户端已经断掉了)]
3.客户端程序在结束之前向服务器发送了请求还没得到返回结果就结束掉了. [参看:tcp ip协议的三次握手]
解决的方法也很简单
在配置文件中加入
代码如下:
[mysqld]
wait_timeout=10
或者
代码如下:
mysql> set global wait_timeout=10;
今天的文章
Navicat for Premium 9.0.2激活(HTTP 499 状态码 nginx下 499错误的解决办法 – 蓝队云)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/116753.html