Apache

Apache

Apche和Nginx 状态页面开启设置

开源技术Ansible 发表了文章 • 0 个评论 • 244 次浏览 • 2016-11-09 22:30 • 来自相关话题

Apache Server Status​设置

1、确认apache已经加载了status_module 模块
一般yum安装的apache已经在主配置文件/etc/httpd/conf/httpd.conf 里面已经加载了
LoadModule status_module modules/mod_status.so检验如下:
[root@web1 httpd]# apachectl -M |grep -i 'status'
status_module (shared)
Syntax OK如果是编译安装的apache,那你就可能没有安装了,编译安装的,动态添加如下:
# 进入到apache的源码mod_status.c目录
cd /usr/local/httpd-2.2.3/modules/generators
# 执行编译加载程序
/usr/local/apache/bin/apxs -i -a -c mod_status.c
# 重启httpd服务
service httpd restart最后在用httpd -M检查模块是否已经加载,确认模块已经加载没有问题后,在httpd.conf文件增加相应的配置路径 ,引入mod_status.so的配置段:
ExtendedStatus On
<Location /Server-status>
SetHandler Server-status
Order deny,allow
Deny from all
Allow from 192.168.1.100
</Location>
说明:
Deny from表示禁止的访问地址;Allow from表示允许的地址访问;ExtendedStatus On表示的是待会访问的时候能看到详细的请求信息,另外该设置仅能用于全局设置,不能在特定的虚拟主机中打开或关闭。启用扩展状态信息将会导致服务器运行效率降低。
 状态页的配置到这里就结束了,下面我们来访问一下,看看具体状态页有哪些可以利用的价值数据。
输入网址http://IP:PORT/server-status就可以看到apache状态页了。
Apache Server Status for localhost
Server Version: Apache/2.2.3 (Centos)
Server Built: Nov 9 2016 15:18:56

Current Time: Sunday, 11-Nov-2016 17:44:21 Öйú±ê׼ʱ¼ä
Restart Time: Sunday, 11-Nov-2016 17:36:28 Öйú±ê׼ʱ¼ä
Parent Server Generation: 1
Server uptime: 7 minutes 52 seconds
Total accesses: 0 - Total Traffic: 0 kB
0 requests/sec - 0 B/second -
1 requests currently being processed, 63 idle workers
______________________________________________________________W_
................................................................

Scoreboard Key:"_" Waiting for Connection, "S" Starting up, "R" Reading Request,"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,"C" Closing connection, "L" Logging, "G" Gracefully finishing,"I" Idle cleanup of worker, "." Open slot with no current process
Srv PID Acc M SS Req Conn Child Slot Client VHost Request
0-1 4140 0/0/0 W 0 287636364 0.0 0.00 0.00 127.0.0.1 192.168.0.100 GET /c-server-status HTTP/1.1

Srv Child Server number - generation
PID OS process ID
Acc Number of accesses this connection / this child / this slot
M Mode of operation
SS Seconds since beginning of most recent request
Req Milliseconds required to process most recent request
Conn Kilobytes transferred this connection
Child Megabytes transferred this child
Slot Total megabytes transferred this slot参数分析:
字段 说明
Server Version Apache 服务器的版本。
Server Built Apache 服务器编译安装的时间。
Current Time 目前的系统时间。
Restart Time Apache 重新启动的时间。
Parent Server Generation Apache 父程序 (parent process) 的世代编号,就是 httpd 接收到 SIGHUP 而重新启动的次数。
Server uptime Apache 启动后到现在经过的时间。
Total accesses 到目前为此 Apache 接收的联机数量及传输的数据量。
CPU Usage 目前 CPU 的使用情形。
_SWSS.... 所有 Apache process 目前的状态。每一个字符表示一个程序,最多可以显示 256 个程序的状态。
Scoreboard Key 上述状态的说明。以下为每一个字符符号所表示的意义:
* _:等待连结中。
* S:启动中。
* R:正在读取要求。
* W:正在送出回应。
* K:处于保持联机的状态。
* D:正在查找DNS。
* C:正在关闭连结。
* L:正在写入记录文件。
* G:进入正常结束程序中。
* I:处理闲置。
* .:尚无此程序。
Srv 本程序与其父程序的世代编号。
PID 本程序的process id。
Acc 分别表示本次联机、本程序所处理的存取次数。
M 该程序目前的状态。
CPU 该程序所耗用的CPU资源。
SS 距离上次处理要求的时间。
Req 最后一次处理要求所耗费的时间,以千分之一秒为单位。
Conn 本次联机所传送的数据量。
Child 由该子程序所传送的数据量。
Slot 由该 Slot 所传送的数据量。
Client 客户端的地址。
VHost 属于哪一个虚拟主机或本主机的IP。
Request 联机所提出的要求信息。

Nginx 状态页配置

如果你的nginx看到了--with-http_sub_module 这个模块,就代表可以启用status,使用nginx -V 就可以看到你的编译参数,如果没有的话,自行重新编译加上--with-http_sub_module 就好。
 
1、添加nginx status配置
在默认主机里面加上location或者你希望能访问到的主机里面
location /nginx_status {
stub_status on;
access_log off;
allow 10.0.1.xx;
allow 139.59.253.28;
deny all;
}

2、重启nginx
# service nginx restart3、查看status页面
# curl http://127.0.0.1/nginx_status
Active connections: 10132
server accepts handled requests
 11302 11302 11409
Reading: 0 Writing: 7 Waiting: 142第1列:
当前与http建立的连接数,包括等待的客户端连接:10132

第2列:
接受的客户端连接总数目:11302
处理的客户端连接总数目:11302
客户端总的请求数目:11409
总共处理了11302个连接 , 成功创建11302次握手, 总共处理了11409个请求

第3列:
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.
 
nginx plus (企业用户)官网(http://demo.nginx.com/status.html#)图示如下: 查看全部
ApachNginxStatus.png


Apache Server Status​设置


1、确认apache已经加载了status_module 模块
一般yum安装的apache已经在主配置文件/etc/httpd/conf/httpd.conf 里面已经加载了
LoadModule status_module modules/mod_status.so
检验如下:
[root@web1 httpd]# apachectl -M |grep -i 'status'
status_module (shared)
Syntax OK
如果是编译安装的apache,那你就可能没有安装了,编译安装的,动态添加如下:
# 进入到apache的源码mod_status.c目录
cd /usr/local/httpd-2.2.3/modules/generators
# 执行编译加载程序
/usr/local/apache/bin/apxs -i -a -c mod_status.c
# 重启httpd服务
service httpd restart
最后在用httpd -M检查模块是否已经加载,确认模块已经加载没有问题后,在httpd.conf文件增加相应的配置路径 ,引入mod_status.so的配置段:
ExtendedStatus On
<Location /Server-status>
SetHandler Server-status
Order deny,allow
Deny from all
Allow from 192.168.1.100
</Location>

说明:
  1. Deny from表示禁止的访问地址;
  2. Allow from表示允许的地址访问;
  3. ExtendedStatus On表示的是待会访问的时候能看到详细的请求信息,另外该设置仅能用于全局设置,不能在特定的虚拟主机中打开或关闭。启用扩展状态信息将会导致服务器运行效率降低。

 状态页的配置到这里就结束了,下面我们来访问一下,看看具体状态页有哪些可以利用的价值数据。
输入网址http://IP:PORT/server-status就可以看到apache状态页了。
Apache Server Status for localhost
Server Version: Apache/2.2.3 (Centos)
Server Built: Nov 9 2016 15:18:56

Current Time: Sunday, 11-Nov-2016 17:44:21 Öйú±ê׼ʱ¼ä
Restart Time: Sunday, 11-Nov-2016 17:36:28 Öйú±ê׼ʱ¼ä
Parent Server Generation: 1
Server uptime: 7 minutes 52 seconds
Total accesses: 0 - Total Traffic: 0 kB
0 requests/sec - 0 B/second -
1 requests currently being processed, 63 idle workers
______________________________________________________________W_
................................................................

Scoreboard Key:"_" Waiting for Connection, "S" Starting up, "R" Reading Request,"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,"C" Closing connection, "L" Logging, "G" Gracefully finishing,"I" Idle cleanup of worker, "." Open slot with no current process
Srv PID Acc M SS Req Conn Child Slot Client VHost Request
0-1 4140 0/0/0 W 0 287636364 0.0 0.00 0.00 127.0.0.1 192.168.0.100 GET /c-server-status HTTP/1.1

Srv Child Server number - generation
PID OS process ID
Acc Number of accesses this connection / this child / this slot
M Mode of operation
SS Seconds since beginning of most recent request
Req Milliseconds required to process most recent request
Conn Kilobytes transferred this connection
Child Megabytes transferred this child
Slot Total megabytes transferred this slot
参数分析:
字段 说明
Server Version Apache 服务器的版本。
Server Built Apache 服务器编译安装的时间。
Current Time 目前的系统时间。
Restart Time Apache 重新启动的时间。
Parent Server Generation Apache 父程序 (parent process) 的世代编号,就是 httpd 接收到 SIGHUP 而重新启动的次数。
Server uptime Apache 启动后到现在经过的时间。
Total accesses 到目前为此 Apache 接收的联机数量及传输的数据量。
CPU Usage 目前 CPU 的使用情形。
_SWSS.... 所有 Apache process 目前的状态。每一个字符表示一个程序,最多可以显示 256 个程序的状态。
Scoreboard Key 上述状态的说明。以下为每一个字符符号所表示的意义:
* _:等待连结中。
* S:启动中。
* R:正在读取要求。
* W:正在送出回应。
* K:处于保持联机的状态。
* D:正在查找DNS。
* C:正在关闭连结。
* L:正在写入记录文件。
* G:进入正常结束程序中。
* I:处理闲置。
* .:尚无此程序。
Srv 本程序与其父程序的世代编号。
PID 本程序的process id。
Acc 分别表示本次联机、本程序所处理的存取次数。
M 该程序目前的状态。
CPU 该程序所耗用的CPU资源。
SS 距离上次处理要求的时间。
Req 最后一次处理要求所耗费的时间,以千分之一秒为单位。
Conn 本次联机所传送的数据量。
Child 由该子程序所传送的数据量。
Slot 由该 Slot 所传送的数据量。
Client 客户端的地址。
VHost 属于哪一个虚拟主机或本主机的IP。
Request 联机所提出的要求信息。


Nginx 状态页配置


如果你的nginx看到了--with-http_sub_module 这个模块,就代表可以启用status,使用nginx -V 就可以看到你的编译参数,如果没有的话,自行重新编译加上--with-http_sub_module 就好。
 
1、添加nginx status配置
在默认主机里面加上location或者你希望能访问到的主机里面
 location /nginx_status {
stub_status on;
access_log off;
allow 10.0.1.xx;
allow 139.59.253.28;
deny all;
}

2、重启nginx
# service nginx restart
3、查看status页面
# curl http://127.0.0.1/nginx_status
Active connections: 10132
server accepts handled requests
 11302 11302 11409
Reading: 0 Writing: 7 Waiting: 142
第1列:
当前与http建立的连接数,包括等待的客户端连接:10132

第2列:
接受的客户端连接总数目:11302
处理的客户端连接总数目:11302
客户端总的请求数目:11409
总共处理了11302个连接 , 成功创建11302次握手, 总共处理了11409个请求

第3列:
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.
 
nginx plus (企业用户)官网(http://demo.nginx.com/status.html#)图示如下:
NginxStatus.png

TCP: time wait bucket table overflow

开源技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 214 次浏览 • 2016-11-03 21:40 • 来自相关话题

Apache .htaccess 文件使用说明

开源技术Ansible 发表了文章 • 0 个评论 • 393 次浏览 • 2016-07-13 20:51 • 来自相关话题

什么是 .htaccess 文件?​

概述来说,htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。

通过 htaccess 文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

理解 WordPress 的 htaccess

# BEGIN WordPress #这是一行注释,表示 WordPress 的 htaccess 从这里开始
#如果 Apache 加载了 mod_rewrite.c 模块,则运行以下代码
RewriteEngine On #启用 mod_rewrite 引擎
RewriteBase / #设置目录重写的基准URL为 /
RewriteRule ^index\.php$ - [L] #如果请求路径是 index.php,停止重写操作(避免死循环)
RewriteCond %{REQUEST_FILENAME} !-f #如果请求的不是一个文件,继续处理
RewriteCond %{REQUEST_FILENAME} !-d #如果请求的不是一个目录,继续处理
RewriteRule . /index.php [L] #把所有的请求指向 /index.php
#结束 IfModule
# END WordPress #WordPress 的 htaccess 到这里结束

使用范例

设置错误页面
ErrorDocument 400 /error_pages/400.html
ErrorDocument 401 /error_pages/401.html
ErrorDocument 403 /error_pages/403.html
ErrorDocument 404 /error_pages/404.html
ErrorDocument 500 /error_pages/500.html

 
设置重定向
#从 old_dir 目录重定向到 new_dir 目录
Redirect /old_dir/ http://www.yourdomain.com/new_dir/index.html
#把通过二级目录访问的请求301重定向到二级域名
RedirectMatch 301 /dir/(.*) http://dir.yourdomain.com/$1
禁止指定IP访问
#禁止 IP 为 255.0.0.0 和 123.45.6.区段的 IP 访问
order allow,deny
deny from 255.0.0.0
deny from 123.45.6.
allow from all
禁止指定来源访问
#禁止从 otherdomain.com 和 anotherdomain.com 的来源访问
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} otherdomain\.com [NC,OR]
RewriteCond %{HTTP_REFERER} anotherdomain\.com
RewriteRule .* - [F]
文件防盗链
 
#从本站以外的域名访问图片,一律显示 feed.jpg
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ http://www.yourdomain.com/feed.jpg [R,L]
禁用文件夹列表
 
#如果你的文件夹没有首页文件,服务器会显示文件列表,你可以设置不显示
IndexIgnore *
#仅不显示 .zip/.jpg/.gif 格式的文件
IndexIgnore [i].zip [/i].jpg *.gif
设置文件夹首页
 
#防止显示文件夹列表,当访问文件夹时,服务器查找 index.html 为首页文件,如不存在依次向后查找
DirectoryIndex index.html index.cgi index.php
设置媒体文件为可下载的而非播放
 
AddType application/octet-stream .mp3 .mp4
自定义 HTTP 报头
Header set X-Pingback "http://www.yourdomain.com/xmlrpc.php"
Header set article-by "google.com"
设置文件过期时间 Cache Control
 
# 启用有效期控制
ExpiresActive On
# gif/png/jpg 有效期为1个月
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
# js/css 有效期为1星期
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType text/css "access plus 1 week" 查看全部
htaccess.png


什么是 .htaccess 文件?​


概述来说,htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。

通过 htaccess 文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。


理解 WordPress 的 htaccess


# BEGIN WordPress #这是一行注释,表示 WordPress 的 htaccess 从这里开始
#如果 Apache 加载了 mod_rewrite.c 模块,则运行以下代码
RewriteEngine On #启用 mod_rewrite 引擎
RewriteBase / #设置目录重写的基准URL为 /
RewriteRule ^index\.php$ - [L] #如果请求路径是 index.php,停止重写操作(避免死循环)
RewriteCond %{REQUEST_FILENAME} !-f #如果请求的不是一个文件,继续处理
RewriteCond %{REQUEST_FILENAME} !-d #如果请求的不是一个目录,继续处理
RewriteRule . /index.php [L] #把所有的请求指向 /index.php
#结束 IfModule
# END WordPress #WordPress 的 htaccess 到这里结束


使用范例


设置错误页面
ErrorDocument 400 /error_pages/400.html
ErrorDocument 401 /error_pages/401.html
ErrorDocument 403 /error_pages/403.html
ErrorDocument 404 /error_pages/404.html
ErrorDocument 500 /error_pages/500.html

 
设置重定向
#从 old_dir 目录重定向到 new_dir 目录
Redirect /old_dir/ http://www.yourdomain.com/new_dir/index.html
#把通过二级目录访问的请求301重定向到二级域名
RedirectMatch 301 /dir/(.*) http://dir.yourdomain.com/$1

禁止指定IP访问
#禁止 IP 为 255.0.0.0 和 123.45.6.区段的 IP 访问
order allow,deny
deny from 255.0.0.0
deny from 123.45.6.
allow from all

禁止指定来源访问
#禁止从 otherdomain.com 和 anotherdomain.com 的来源访问
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} otherdomain\.com [NC,OR]
RewriteCond %{HTTP_REFERER} anotherdomain\.com
RewriteRule .* - [F]

文件防盗链
 
#从本站以外的域名访问图片,一律显示 feed.jpg
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ http://www.yourdomain.com/feed.jpg [R,L]

禁用文件夹列表
 
#如果你的文件夹没有首页文件,服务器会显示文件列表,你可以设置不显示
IndexIgnore *
#仅不显示 .zip/.jpg/.gif 格式的文件
IndexIgnore [i].zip [/i].jpg *.gif

设置文件夹首页
 
#防止显示文件夹列表,当访问文件夹时,服务器查找 index.html 为首页文件,如不存在依次向后查找
DirectoryIndex index.html index.cgi index.php

设置媒体文件为可下载的而非播放
 
AddType application/octet-stream .mp3 .mp4

自定义 HTTP 报头
Header set X-Pingback "http://www.yourdomain.com/xmlrpc.php"
Header set article-by "google.com"

设置文件过期时间 Cache Control
 
# 启用有效期控制
ExpiresActive On
# gif/png/jpg 有效期为1个月
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
# js/css 有效期为1星期
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType text/css "access plus 1 week"

解决Apache child pid 22404 exit signal Segmentation fault (11)错误

开源技术Ansible 发表了文章 • 0 个评论 • 608 次浏览 • 2016-07-07 22:31 • 来自相关话题

新搭建的测试环境用的Apache/2.2.15,然后测试的时候,页面报502,最后查看Apache的log日志如下:
[Wed Jul 07 11:36:03 2016] [notice] child pid 22404 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22424 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22404 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22424 exit signal Segmentation fault (11)
为了解决这个问题,网上搜了几个方法都无法解决,然后网上有人说是Apache的一个bug,是内存问题,最后我只能写个脚本处理。
 
1、检查服务器
[root@uweb1 atom]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m

[root@uweb1 atom]# uname -r
2.6.32-573.22.1.el6.x86_64[root@uweb1 atom]# slabtop
Active / Total Objects (% used) : 262463 / 284128 (92.4%)
Active / Total Slabs (% used) : 18670 / 18670 (100.0%)
Active / Total Caches (% used) : 92 / 172 (53.5%)
Active / Total Size (% used) : 74471.91K / 77331.03K (96.3%)
Minimum / Average / Maximum Object : 0.02K / 0.27K / 4096.00K

OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
103452 103431 99% 0.10K 2796 37 11184K buffer_head
34000 33764 99% 0.98K 8500 4 34000K ext4_inode_cache
33240 33240 100% 0.19K 1662 20 6648K dentry
17024 16889 99% 0.03K 152 112 608K size-32
15323 7993 52% 0.05K 199 77 796K anon_vma_chain
13148 8203 62% 0.20K 692 19 2768K vm_area_struct
11151 9723 87% 0.06K 189 59 756K size-64
7616 7071 92% 0.55K 1088 7 4352K radix_tree_node
7261 7251 99% 0.07K 137 53 548K selinux_inode_security
6767 3720 54% 0.05K 101 67 404K anon_vma
6534 6527 99% 0.14K 242 27 968K sysfs_dir_cache
4404 4404 100% 0.58K 734 6 2936K inode_cache
3816 3767 98% 0.07K 72 53 288K Acpi-Operand
2580 1833 71% 0.12K 86 30 344K size-128
2400 1523 63% 0.25K 160 15 640K filp
2208 2199 99% 0.04K 24 92 96K Acpi-Namespace
2080 2008 96% 0.19K 104 20 416K size-192
1782 1782 100% 0.64K 297 6 1188K proc_inode_cache
756 744 98% 1.00K 189 4 756K size-1024 
其实apache报[notice] child pid 1421 exit signal Segmentation fault (11),绝大部分是内存泄露的问题,网上的禁止proxy和cache模块,经过我试验没有效果,修改php内存也一样。
 
2、解决内存泄露脚本
#!/bin/bash
time=`date`
echo $time > /tmp/clear_cached.txt

echo "total/used/free/shared/buffers/cached" >> /tmp/clear_cached.txt
echo "Cleart Before" >> /tmp/clear_cached.txt
free -m|grep Mem: >> /tmp/clear_cached.txt
sync;
echo 2 > /proc/sys/vm/drop_caches;
echo 0 > /proc/sys/vm/drop_caches;
echo "Clear After" >> /tmp/clear_cached.txt
free -m|grep Mem: >> /tmp/clear_cached.txt 查看全部
新搭建的测试环境用的Apache/2.2.15,然后测试的时候,页面报502,最后查看Apache的log日志如下:
[Wed Jul 07 11:36:03 2016] [notice] child pid 22404 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22424 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22404 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22424 exit signal Segmentation fault (11)

为了解决这个问题,网上搜了几个方法都无法解决,然后网上有人说是Apache的一个bug,是内存问题,最后我只能写个脚本处理。
 
1、检查服务器
[root@uweb1 atom]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m

[root@uweb1 atom]# uname -r
2.6.32-573.22.1.el6.x86_64
[root@uweb1 atom]# slabtop
Active / Total Objects (% used) : 262463 / 284128 (92.4%)
Active / Total Slabs (% used) : 18670 / 18670 (100.0%)
Active / Total Caches (% used) : 92 / 172 (53.5%)
Active / Total Size (% used) : 74471.91K / 77331.03K (96.3%)
Minimum / Average / Maximum Object : 0.02K / 0.27K / 4096.00K

OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
103452 103431 99% 0.10K 2796 37 11184K buffer_head
34000 33764 99% 0.98K 8500 4 34000K ext4_inode_cache
33240 33240 100% 0.19K 1662 20 6648K dentry
17024 16889 99% 0.03K 152 112 608K size-32
15323 7993 52% 0.05K 199 77 796K anon_vma_chain
13148 8203 62% 0.20K 692 19 2768K vm_area_struct
11151 9723 87% 0.06K 189 59 756K size-64
7616 7071 92% 0.55K 1088 7 4352K radix_tree_node
7261 7251 99% 0.07K 137 53 548K selinux_inode_security
6767 3720 54% 0.05K 101 67 404K anon_vma
6534 6527 99% 0.14K 242 27 968K sysfs_dir_cache
4404 4404 100% 0.58K 734 6 2936K inode_cache
3816 3767 98% 0.07K 72 53 288K Acpi-Operand
2580 1833 71% 0.12K 86 30 344K size-128
2400 1523 63% 0.25K 160 15 640K filp
2208 2199 99% 0.04K 24 92 96K Acpi-Namespace
2080 2008 96% 0.19K 104 20 416K size-192
1782 1782 100% 0.64K 297 6 1188K proc_inode_cache
756 744 98% 1.00K 189 4 756K size-1024
 
其实apache报[notice] child pid 1421 exit signal Segmentation fault (11),绝大部分是内存泄露的问题,网上的禁止proxy和cache模块,经过我试验没有效果,修改php内存也一样。
 
2、解决内存泄露脚本
#!/bin/bash
time=`date`
echo $time > /tmp/clear_cached.txt

echo "total/used/free/shared/buffers/cached" >> /tmp/clear_cached.txt
echo "Cleart Before" >> /tmp/clear_cached.txt
free -m|grep Mem: >> /tmp/clear_cached.txt
sync;
echo 2 > /proc/sys/vm/drop_caches;
echo 0 > /proc/sys/vm/drop_caches;
echo "Clear After" >> /tmp/clear_cached.txt
free -m|grep Mem: >> /tmp/clear_cached.txt

Apache Struts 远程代码执行漏洞安全预警(CVE-2016-0785/CVE-2016-4438)

开源技术Geek小A 发表了文章 • 0 个评论 • 342 次浏览 • 2016-07-01 23:14 • 来自相关话题

近日struts2官方发布了多个安全漏洞,其中S2-036,S2-037分别为2个远程代码执行漏洞(CVE-2016-0785,CVE-2016-4438),被攻击者利用可获取Struts程序的权限远程执行任意命令。
 
影响版本:
        Struts 2.3.20 - Struts 2.3.28.1
 
漏洞描述:
        S2-036漏洞:该漏洞与前期爆发的S2-029类似,在开启强制OGNL double evaluation的情况下,攻击者用可以将构造的特定代码放入标签属性,从而达到远程代码执行的目的。(由于需要开发者使用了特定的代码写法才会导致漏洞,因此官方将该漏洞风险等级调整为中级)
 
漏洞详情:https://cwiki.apache.org/confluence/display/WW/S2-036 
        S2-037漏洞:该漏洞被官方定级为高危,若服务端使用到REST插件,攻击者可远程传递一个恶意的表达式实现远程代码执行攻击。
 
漏洞详情:https://cwiki.apache.org/confluence/display/WW/S2-037 
 
漏洞验证:
        检查您当前的struts2版本,若版本在受影响版本范围,且使用到REST插件,说明存在漏洞。

        修复方案:
        如果您使用了Struts2并在受影响版本内,我们建议您尽快按照如下方案进行修复:
        1、在使用的标签属性中对每一个传入的参数值进行适当的验证;
        2、定期定日备份数据以及源代码,在被攻击第一时间恢复和还原;
        3、目前官方已经推出了Struts 2.3.29和Struts 2.5.1修复这几个问题,大家可以针对自己所使用的版本进行升级(推荐)
        下载地址:https://github.com/apache/struts/releases/ 
 

Struts2作为广泛应用的Web框架,安全问题一直层出不穷。为了保证安全,建议您在业务处理中不应信任用户提交上来的任何数据,做好安全过滤。最好能在Ognl的执行入口加入过滤黑名单,并及时将Struts更新到最新版本。 查看全部

近日struts2官方发布了多个安全漏洞,其中S2-036,S2-037分别为2个远程代码执行漏洞(CVE-2016-0785,CVE-2016-4438),被攻击者利用可获取Struts程序的权限远程执行任意命令。
 
影响版本:
        Struts 2.3.20 - Struts 2.3.28.1
 
漏洞描述:
        S2-036漏洞:该漏洞与前期爆发的S2-029类似,在开启强制OGNL double evaluation的情况下,攻击者用可以将构造的特定代码放入标签属性,从而达到远程代码执行的目的。(由于需要开发者使用了特定的代码写法才会导致漏洞,因此官方将该漏洞风险等级调整为中级)
 
漏洞详情https://cwiki.apache.org/confluence/display/WW/S2-036 
        S2-037漏洞:该漏洞被官方定级为高危,若服务端使用到REST插件,攻击者可远程传递一个恶意的表达式实现远程代码执行攻击。
 
漏洞详情:https://cwiki.apache.org/confluence/display/WW/S2-037 
 
漏洞验证:
        检查您当前的struts2版本,若版本在受影响版本范围,且使用到REST插件,说明存在漏洞。

        修复方案:
        如果您使用了Struts2并在受影响版本内,我们建议您尽快按照如下方案进行修复:
        1、在使用的标签属性中对每一个传入的参数值进行适当的验证;
        2、定期定日备份数据以及源代码,在被攻击第一时间恢复和还原;
        3、目前官方已经推出了Struts 2.3.29和Struts 2.5.1修复这几个问题,大家可以针对自己所使用的版本进行升级(推荐)
        下载地址:https://github.com/apache/struts/releases/ 
 

Struts2作为广泛应用的Web框架,安全问题一直层出不穷。为了保证安全,建议您在业务处理中不应信任用户提交上来的任何数据,做好安全过滤。最好能在Ognl的执行入口加入过滤黑名单,并及时将Struts更新到最新版本。

Apache Module加载问题记录

开源技术koyo 发表了文章 • 0 个评论 • 473 次浏览 • 2016-06-19 22:04 • 来自相关话题

问题1:
Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration 解决方法:
LoadModule authz_host_module modules/mod_authz_host.so问题2:
Invalid command 'CustomLog', perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule log_config_module modules/mod_log_config.so问题3:
设置了DirectoryIndex index.html index.php 却仍然不能默认访问: index.php解决方法:
LoadModule dir_module modules/mod_dir.so问题4:
Invalid command ‘Require’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule authz_core_module modules/mod_authz_core.so问题5:
Invalid command ‘DirectoryIndex’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule dir_module modules/mod_dir.so问题6:
Unknown Authz provider: all 解决方法:
LoadModule authz_host_module modules/mod_authz_host.so问题7:
Invalid command ‘Alias’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule alias_module modules/mod_alias.so问题8:
Invalid command ‘Allow’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule authn_core_module modules/mod_authn_core.so问题9:
Invalid command ‘AddHandler’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule mime_module modules/mod_mime.so问题10:
Invalid command ‘AuthType’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule authn_core_module modules/mod_authn_core.so问题11:
Invalid command ‘AuthUserFile’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule authn_file_module modules/mod_authn_file.so问题12:
Unknown Authz provider: valid-user解决方法:
LoadModule authz_user_module modules/mod_authz_user.so问题13:
Server MUST relinquish startup privileges before accepting connections. Please ensure mod_unixd or other system security module is loaded.解决方法:
LoadModule unixd_module modules/mod_unixd.so 查看全部
问题1:
Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration 
解决方法:
LoadModule authz_host_module modules/mod_authz_host.so
问题2:
Invalid command 'CustomLog', perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule log_config_module modules/mod_log_config.so
问题3:
设置了DirectoryIndex index.html index.php 却仍然不能默认访问: index.php
解决方法:
LoadModule dir_module modules/mod_dir.so
问题4:
Invalid command ‘Require’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule authz_core_module modules/mod_authz_core.so
问题5:
Invalid command ‘DirectoryIndex’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule dir_module modules/mod_dir.so
问题6:
Unknown Authz provider: all 
解决方法:
LoadModule authz_host_module modules/mod_authz_host.so
问题7:
Invalid command ‘Alias’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule alias_module modules/mod_alias.so
问题8:
Invalid command ‘Allow’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule authn_core_module modules/mod_authn_core.so
问题9:
Invalid command ‘AddHandler’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule mime_module  modules/mod_mime.so
问题10:
Invalid command ‘AuthType’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule authn_core_module modules/mod_authn_core.so
问题11:
Invalid command ‘AuthUserFile’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule authn_file_module modules/mod_authn_file.so
问题12:
Unknown Authz provider: valid-user
解决方法:
LoadModule authz_user_module modules/mod_authz_user.so
问题13:
Server MUST relinquish startup privileges before accepting connections.  Please ensure mod_unixd or other system security module is loaded.
解决方法:
LoadModule unixd_module modules/mod_unixd.so

利用Apache的X-Forwarded-For配置屏蔽IP

开源技术being 发表了文章 • 0 个评论 • 477 次浏览 • 2016-06-07 17:34 • 来自相关话题

线上站点更新了登录方式,从验证码变成了拼图,但是不知道为什么引发了一个漏洞,导致有人不停的刷登录页面,尝试破解什么的,还好这个人发出的请求频率较高,但是访问源都是一个ip,log如下:219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
一秒钟你刷好几十次这还是一台服务器,判断为非正常,先用Iptables屏蔽掉!iptables -I INPUT -s 219.146.239.138 -j DROP看看效果,哎?怎么还访问的那么欢实,突然想起来,这些服务器是 haproxy 转过来的,日志格式里的ip地址是X-Forwarded-For,我总不能跑haproxy上去加iptables吧!<Directory /data/vhosts/htdocs/>
SetEnvIf X-Forwarded-For "^(219\.146\.239\.138)" Deny1
Options None
AllowOverride None
Order deny,allow
Deny from all
Allow from env=Deny1
</Directory>好了,再看看全部403,这种方法防护小规模的刷洗还是可以的,但是大规模的需要做自动发现和自动添加防护! 查看全部
线上站点更新了登录方式,从验证码变成了拼图,但是不知道为什么引发了一个漏洞,导致有人不停的刷登录页面,尝试破解什么的,还好这个人发出的请求频率较高,但是访问源都是一个ip,log如下:
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"

一秒钟你刷好几十次这还是一台服务器,判断为非正常,先用Iptables屏蔽掉!
iptables -I INPUT -s 219.146.239.138 -j DROP
看看效果,哎?怎么还访问的那么欢实,突然想起来,这些服务器是 haproxy 转过来的,日志格式里的ip地址是X-Forwarded-For,我总不能跑haproxy上去加iptables吧!
<Directory /data/vhosts/htdocs/>
SetEnvIf X-Forwarded-For "^(219\.146\.239\.138)" Deny1
Options None
AllowOverride None
Order deny,allow
Deny from all
Allow from env=Deny1
</Directory>
好了,再看看全部403,这种方法防护小规模的刷洗还是可以的,但是大规模的需要做自动发现和自动添加防护!

OpenSSL CVE-2016-0800高危漏洞安全

开源技术Geek小A 发表了文章 • 0 个评论 • 434 次浏览 • 2016-05-24 10:17 • 来自相关话题

3月1日OpenSSL.org官方发布一个OpenSSL的高危漏洞(CVE-2016-0800,别名"DROWN")。该漏洞可能被黑客利用进行中间人攻击,窃取HTTPS加密数据的内容。OpenSSL官方已发布修复方案,建议各位用户关注并尽快升级系统修复漏洞!
        详情请查看官方公告:https://www.openssl.org/news/secadv/20160301.txt
        受影响的服务版本:
        Apache: 非2.4.x版本
        Nginx: 0.7.64、0.8.18及更早版本
        Postfix: 早于2.9.14、2.10.8、2.11.6、3.0.2的版本 (2015.07.20之前发布的版本)
        Openssl: 1.0.2a、1.0.1m、1.0.0r、0.9.8zf及更早版本
        OpenSSL版本检测:
        openssl version
        若版本低于修复版本请更新openssl
        针对web server,可通过如下方法检测:

        openssl s_client -connect 待测域名或IP地址:443 -ssl2
        漏洞修复方案:

        对于已经运行的云服务器,UCLOUD软件源已经提供了修复漏洞的openssl软件包,您可以通过手动更新openssl进行修复。
        详细修复方法如下:
        1、CentOS版本:
        yum clean all & yum makecache
        yum -y update openssl
        2、Ubuntu\Debian版本:
        sudo apt-get update
        sudo apt-get install libssl1.0.0
        若不想立即进行升级,您可以禁用sslv2协议,操作方法如下:

        1)Apache禁用sslv2协议:
        在Apache的SSL配置文件中禁用SSLv2协议(建议同时禁用SSLv3),确保SSLProtocol配置项内容如下:
        SSLProtocol All -SSLv2
        配置完毕,重启apache服务。
        2)Nginx禁用sslv2协议:
        修改nginx的SSL配置文件,设置只允许使用TLS协议,确保ssl_protocols配置项内容如下:
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2
        配置完毕,重启nginx服务 查看全部

3月1日OpenSSL.org官方发布一个OpenSSL的高危漏洞(CVE-2016-0800,别名"DROWN")。该漏洞可能被黑客利用进行中间人攻击,窃取HTTPS加密数据的内容。OpenSSL官方已发布修复方案,建议各位用户关注并尽快升级系统修复漏洞!
        详情请查看官方公告:https://www.openssl.org/news/secadv/20160301.txt
        受影响的服务版本:
        Apache: 非2.4.x版本
        Nginx: 0.7.64、0.8.18及更早版本
        Postfix: 早于2.9.14、2.10.8、2.11.6、3.0.2的版本 (2015.07.20之前发布的版本)
        Openssl: 1.0.2a、1.0.1m、1.0.0r、0.9.8zf及更早版本
        OpenSSL版本检测:
        openssl version
        若版本低于修复版本请更新openssl
        针对web server,可通过如下方法检测:

        openssl s_client -connect 待测域名或IP地址:443 -ssl2
        漏洞修复方案:

        对于已经运行的云服务器,UCLOUD软件源已经提供了修复漏洞的openssl软件包,您可以通过手动更新openssl进行修复。
        详细修复方法如下:
        1、CentOS版本:
        yum clean all & yum makecache
        yum -y update openssl
        2、Ubuntu\Debian版本:
        sudo apt-get update
        sudo apt-get install libssl1.0.0
        若不想立即进行升级,您可以禁用sslv2协议,操作方法如下:

        1)Apache禁用sslv2协议:
        在Apache的SSL配置文件中禁用SSLv2协议(建议同时禁用SSLv3),确保SSLProtocol配置项内容如下:
        SSLProtocol All -SSLv2
        配置完毕,重启apache服务。
        2)Nginx禁用sslv2协议:
        修改nginx的SSL配置文件,设置只允许使用TLS协议,确保ssl_protocols配置项内容如下:
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2
        配置完毕,重启nginx服务

Apache Struts s2-033 远程代码执行漏洞预警(CVE-2016-3087)

开源技术Geek小A 发表了文章 • 0 个评论 • 801 次浏览 • 2016-05-24 10:15 • 来自相关话题

近日struts2官方发布了1个远程代码执行漏洞(CVE-2016-3087),该漏洞主要影响Struts 2.3.20 - Struts 2.3.28 (除2.3.20.3、2.3.24.3、2.3.28.1)版本,攻击者可利用该漏洞获取Struts程序的权限远程执行任意命令。

        受影响版本:
        Struts 2.3.20 - Struts 2.3.28 (2.3.20.3、2.3.24.3、2.3.28.1除外)

        漏洞描述:
        使用到REST插件的Struts2应用,在开启动态方法调用(DMI)的情况下,会被攻击者实现远程代码执行攻击。
        https://cwiki.apache.org/confluence/display/WW/S2-033 

        漏洞验证:
        检查Struts2的配置文件struts.xml,确认“struts.enable.DynamicMethodInvocation” 是否为“true",如为“true",且版本在受影响版本范围内,则说明受影响,否则不受影响。

        修复方案:
        如果您使用了Struts2并在受影响版本内,我们建议您尽快按照如下方案进行修复:
        1、禁用动态方法调用(DMI),修改Struts2的配置文件struts.xml,将struts.enable.DynamicMethodInvocation设置为“false”;
        2、目前官方已经推出了2.3.20.3、2.3.24.3和2.3.28.1修复这个问题,大家可以针对自己所使用的版本进行升级。下载地址:https://struts.apache.org/download.cgi#struts23281 查看全部
近日struts2官方发布了1个远程代码执行漏洞(CVE-2016-3087),该漏洞主要影响Struts 2.3.20 - Struts 2.3.28 (除2.3.20.3、2.3.24.3、2.3.28.1)版本,攻击者可利用该漏洞获取Struts程序的权限远程执行任意命令。

        受影响版本:
        Struts 2.3.20 - Struts 2.3.28 (2.3.20.3、2.3.24.3、2.3.28.1除外)

        漏洞描述:
        使用到REST插件的Struts2应用,在开启动态方法调用(DMI)的情况下,会被攻击者实现远程代码执行攻击。
        https://cwiki.apache.org/confluence/display/WW/S2-033 

        漏洞验证:
        检查Struts2的配置文件struts.xml,确认“struts.enable.DynamicMethodInvocation” 是否为“true",如为“true",且版本在受影响版本范围内,则说明受影响,否则不受影响。

        修复方案:
        如果您使用了Struts2并在受影响版本内,我们建议您尽快按照如下方案进行修复:
        1、禁用动态方法调用(DMI),修改Struts2的配置文件struts.xml,将struts.enable.DynamicMethodInvocation设置为“false”;
        2、目前官方已经推出了2.3.20.3、2.3.24.3和2.3.28.1修复这个问题,大家可以针对自己所使用的版本进行升级。下载地址:https://struts.apache.org/download.cgi#struts23281

优定制:用好网页性能监控 提升网站收益

回复

大数据/云计算cloudwise 发起了问题 • 1 人关注 • 0 个回复 • 653 次浏览 • 2016-05-06 14:23 • 来自相关话题

条新动态, 点击查看
Ansible

Ansible 回答了问题 • 2015-10-20 17:14 • 1 个回复 不感兴趣

apr_sockaddr_info_get() failed for

赞同来自:

> 原因:


这个问题是因为没有在 /etc/httpd/conf/httpd.conf 中设定 ServerName。所以apache会用主机上的名称来取代,首先会去找/etc/hosts中有没有主机的定义。
> 解决办法:


(1)可以设定http... 显示全部 »
> 原因:


这个问题是因为没有在 /etc/httpd/conf/httpd.conf 中设定 ServerName。所以apache会用主机上的名称来取代,首先会去找/etc/hosts中有没有主机的定义。
> 解决办法:


(1)可以设定httpd.conf文件中的 ServerName,如下:ServerName 0.0.0.0:80 脚本:sed -i 's@#ServerName www.example.com:80@ServerName 0.0.0.0:80@g' /etc/httpd/conf/httpd.conf

(2)在 /etc/hosts 中填入自己的主机名称 xahost,如下:127.0.0.1 xahost
 
Geek小A

Geek小A 回答了问题 • 2015-10-31 00:09 • 1 个回复 不感兴趣

Centos下apache网站乱码

赞同来自:

你这个问题,应该是你网站代码编码的问题,应该是你的代码编码是GBK的,但是默认apache的配置编码是utf8的,所以你需要进行如下操作,可以解决你的问题,可以尝试一下:
打开Apache配置文件httpd.conf,如默认情况下为 /etc/httpd/co... 显示全部 »
你这个问题,应该是你网站代码编码的问题,应该是你的代码编码是GBK的,但是默认apache的配置编码是utf8的,所以你需要进行如下操作,可以解决你的问题,可以尝试一下:
打开Apache配置文件httpd.conf,如默认情况下为 /etc/httpd/conf/httpd.conf
# vi /etc/httpd/conf/httpd.conf

找到AddDefaultCharset配置项
AddDefaultCharset UTF-8

修改AddDefaultCharset配置,关闭配置字符,如下
AddDefaultCharset Off

同时也可设置Apache默认编码为GB2312如下
AddDefaultCharset GB2312 还有就是,你可以把你代码的编码编程utf-8,那就默认就支持了apache!
 

Apache Couldn't start ErrorLog process

开源技术Geek小A 回复了问题 • 2 人关注 • 2 个回复 • 812 次浏览 • 2015-09-20 12:39 • 来自相关话题

为apache单独编译mod_rewrite.so

开源技术OpenSkill 发表了文章 • 1 个评论 • 766 次浏览 • 2015-06-09 22:59 • 来自相关话题

问题描述:
在编译安装完了apache之后,发现需要rewrite功能,但是用/usr/local/apache2/bin/apachectl -M命令发现没有rewrite_module
解决办法:
1)重现编译apache
你可以查看/usr/local/apache2/build/config.nice 这个文件来查看你apache的编译参数,然后重新编译你只需要添加--enable-rewrite参数就行。
2)手动添加mod_rewrite模块
首先在apache的源码安装目录中寻找mod_rewrite.c文件# find / -name mod_rewrite.c
/usr/local/src/httpd-2.2.12/modules/mappers/mod_rewrite.c //apache的源码安装目录中的mod_rewrite.c文件

# cd /usr/local/src/httpd-2.2.12/modules/mappers/
# /usr/local/apache2/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你编译安装apache的bin目录里

# /usr/local/apache2/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果这个过程中没有出错的话,在你的apache的modules目录中编译出一个mod_rewrite.so文件编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:
LoadModule rewrite_module modules/mod_rewrite.so
这时,你的apache应该已经支持rewrite了,    注:完成之后,记得重启服务器apache。
 
重启apache的过程中你可能还会遇到如下问题:httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Can't locate API module structure `mod_rewrite_module' in file /usr/local/apache2/modules/mod_rewrite.so: /usr/local/apache2/modules/mod_rewrite.so: undefined symbol: mod_rewrite_module
或者
Syntax error on line 329 of /usr/local/apache2/conf/httpd.conf: Can`t loacte API module staructure `mod_rewrite_module` in file /usr/local/apache2/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-0.so.0:undefined symbol:mod_rewrite_module
解决方法如下:修改 httpd.conf,将
LoadModule mod_rewrite_module modules/mod_rewrite.so
改为
LoadModule rewrite_module modules/mod_rewrite.so如果重启apache出现这个错误  module rewrite_module is built-in and can`t be loaded
表示模块是内建的,不用再调入,注释掉#LoadModule rewrite_module modules/mod_rewrite.so语法检查:# /usr/local/apache2/bin/apachectl configtest
Syntax OK
这时,你的apache应该已经支持rewrite了。需要注意的配置,配置虚拟主机的时候要类似如下设置才可以生效:<VirtualHost *:80>
DocumentRoot /var/www/www/devopsh/
ServerName www.devopsh.com
<Directory /var/www/www/devopsh/>
Options FollowSymLinks
AllowOverride All
order allow,deny
Allow from all
</Directory>
</VirtualHost>

如果AllowOverride设置为none的话,apache会不读取网站的.htaccess文件!上面虚拟主机只是针对指定文件夹可以读取到.htaccess文件了,如果要针对所有的文件夹都支持.htaccess,修改主配置文件httpd.conf,修改如下:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>

把AllowOverride None
"改成"
AllowOverride All
这样所有的文件夹都支持.htaccess了 查看全部
问题描述:
在编译安装完了apache之后,发现需要rewrite功能,但是用/usr/local/apache2/bin/apachectl -M命令发现没有rewrite_module
解决办法:
1)重现编译apache
你可以查看/usr/local/apache2/build/config.nice 这个文件来查看你apache的编译参数,然后重新编译你只需要添加--enable-rewrite参数就行。
2)手动添加mod_rewrite模块
首先在apache的源码安装目录中寻找mod_rewrite.c文件
# find / -name mod_rewrite.c
/usr/local/src/httpd-2.2.12/modules/mappers/mod_rewrite.c //apache的源码安装目录中的mod_rewrite.c文件

# cd /usr/local/src/httpd-2.2.12/modules/mappers/
# /usr/local/apache2/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你编译安装apache的bin目录里

# /usr/local/apache2/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果这个过程中没有出错的话,在你的apache的modules目录中编译出一个mod_rewrite.so文件
编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:
LoadModule rewrite_module modules/mod_rewrite.so
这时,你的apache应该已经支持rewrite了,    注:完成之后,记得重启服务器apache。
 
重启apache的过程中你可能还会遇到如下问题:
httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Can't locate API module structure `mod_rewrite_module' in file /usr/local/apache2/modules/mod_rewrite.so: /usr/local/apache2/modules/mod_rewrite.so: undefined symbol: mod_rewrite_module
或者
Syntax error on line 329 of /usr/local/apache2/conf/httpd.conf: Can`t loacte API module staructure `mod_rewrite_module` in file /usr/local/apache2/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-0.so.0:undefined symbol:mod_rewrite_module

解决方法如下:
修改 httpd.conf,将
LoadModule mod_rewrite_module modules/mod_rewrite.so
改为
LoadModule rewrite_module modules/mod_rewrite.so
如果重启apache出现这个错误  module rewrite_module is built-in and can`t be loaded
表示模块是内建的,不用再调入,注释掉
#LoadModule rewrite_module modules/mod_rewrite.so
语法检查:
# /usr/local/apache2/bin/apachectl configtest
Syntax OK
这时,你的apache应该已经支持rewrite了。
需要注意的配置,配置虚拟主机的时候要类似如下设置才可以生效:
<VirtualHost *:80>
DocumentRoot /var/www/www/devopsh/
ServerName www.devopsh.com
<Directory /var/www/www/devopsh/>
Options FollowSymLinks
AllowOverride All
order allow,deny
Allow from all
</Directory>
</VirtualHost>

如果AllowOverride设置为none的话,apache会不读取网站的.htaccess文件!
上面虚拟主机只是针对指定文件夹可以读取到.htaccess文件了,如果要针对所有的文件夹都支持.htaccess,修改主配置文件httpd.conf,修改如下:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>

把AllowOverride None
"改成"
AllowOverride All
这样所有的文件夹都支持.htaccess了

TCP: time wait bucket table overflow

回复

开源技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 214 次浏览 • 2016-11-03 21:40 • 来自相关话题

优定制:用好网页性能监控 提升网站收益

回复

大数据/云计算cloudwise 发起了问题 • 1 人关注 • 0 个回复 • 653 次浏览 • 2016-05-06 14:23 • 来自相关话题

如何查看apache和php的编译参数

回复

开源技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 607 次浏览 • 2016-04-17 00:02 • 来自相关话题

Centos下apache网站乱码

回复

开源技术Geek小A 回复了问题 • 2 人关注 • 1 个回复 • 742 次浏览 • 2015-10-31 00:09 • 来自相关话题

apr_sockaddr_info_get() failed for

回复

开源技术Ansible 回复了问题 • 2 人关注 • 1 个回复 • 809 次浏览 • 2015-10-20 17:14 • 来自相关话题

Apache Couldn't start ErrorLog process

回复

开源技术Geek小A 回复了问题 • 2 人关注 • 2 个回复 • 812 次浏览 • 2015-09-20 12:39 • 来自相关话题

Directory index forbidden by Options directive

回复

开源技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 969 次浏览 • 2015-09-04 19:30 • 来自相关话题

mod_include: Options +Includes (or IncludesNoExec) wasn't set, INCLUDES filter removed

回复

开源技术OpenSkill 回复了问题 • 2 人关注 • 1 个回复 • 981 次浏览 • 2015-09-04 19:11 • 来自相关话题

从源码安装apache2,遇到错误:cannot install `libaprutil-1.la'

回复

开源技术采菊篱下 回复了问题 • 1 人关注 • 1 个回复 • 798 次浏览 • 2015-06-14 11:34 • 来自相关话题

apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80

回复

开源技术采菊篱下 回复了问题 • 1 人关注 • 1 个回复 • 865 次浏览 • 2015-06-14 11:32 • 来自相关话题

Apche和Nginx 状态页面开启设置

开源技术Ansible 发表了文章 • 0 个评论 • 244 次浏览 • 2016-11-09 22:30 • 来自相关话题

Apache Server Status​设置

1、确认apache已经加载了status_module 模块
一般yum安装的apache已经在主配置文件/etc/httpd/conf/httpd.conf 里面已经加载了
LoadModule status_module modules/mod_status.so检验如下:
[root@web1 httpd]# apachectl -M |grep -i 'status'
status_module (shared)
Syntax OK如果是编译安装的apache,那你就可能没有安装了,编译安装的,动态添加如下:
# 进入到apache的源码mod_status.c目录
cd /usr/local/httpd-2.2.3/modules/generators
# 执行编译加载程序
/usr/local/apache/bin/apxs -i -a -c mod_status.c
# 重启httpd服务
service httpd restart最后在用httpd -M检查模块是否已经加载,确认模块已经加载没有问题后,在httpd.conf文件增加相应的配置路径 ,引入mod_status.so的配置段:
ExtendedStatus On
<Location /Server-status>
SetHandler Server-status
Order deny,allow
Deny from all
Allow from 192.168.1.100
</Location>
说明:
Deny from表示禁止的访问地址;Allow from表示允许的地址访问;ExtendedStatus On表示的是待会访问的时候能看到详细的请求信息,另外该设置仅能用于全局设置,不能在特定的虚拟主机中打开或关闭。启用扩展状态信息将会导致服务器运行效率降低。
 状态页的配置到这里就结束了,下面我们来访问一下,看看具体状态页有哪些可以利用的价值数据。
输入网址http://IP:PORT/server-status就可以看到apache状态页了。
Apache Server Status for localhost
Server Version: Apache/2.2.3 (Centos)
Server Built: Nov 9 2016 15:18:56

Current Time: Sunday, 11-Nov-2016 17:44:21 Öйú±ê׼ʱ¼ä
Restart Time: Sunday, 11-Nov-2016 17:36:28 Öйú±ê׼ʱ¼ä
Parent Server Generation: 1
Server uptime: 7 minutes 52 seconds
Total accesses: 0 - Total Traffic: 0 kB
0 requests/sec - 0 B/second -
1 requests currently being processed, 63 idle workers
______________________________________________________________W_
................................................................

Scoreboard Key:"_" Waiting for Connection, "S" Starting up, "R" Reading Request,"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,"C" Closing connection, "L" Logging, "G" Gracefully finishing,"I" Idle cleanup of worker, "." Open slot with no current process
Srv PID Acc M SS Req Conn Child Slot Client VHost Request
0-1 4140 0/0/0 W 0 287636364 0.0 0.00 0.00 127.0.0.1 192.168.0.100 GET /c-server-status HTTP/1.1

Srv Child Server number - generation
PID OS process ID
Acc Number of accesses this connection / this child / this slot
M Mode of operation
SS Seconds since beginning of most recent request
Req Milliseconds required to process most recent request
Conn Kilobytes transferred this connection
Child Megabytes transferred this child
Slot Total megabytes transferred this slot参数分析:
字段 说明
Server Version Apache 服务器的版本。
Server Built Apache 服务器编译安装的时间。
Current Time 目前的系统时间。
Restart Time Apache 重新启动的时间。
Parent Server Generation Apache 父程序 (parent process) 的世代编号,就是 httpd 接收到 SIGHUP 而重新启动的次数。
Server uptime Apache 启动后到现在经过的时间。
Total accesses 到目前为此 Apache 接收的联机数量及传输的数据量。
CPU Usage 目前 CPU 的使用情形。
_SWSS.... 所有 Apache process 目前的状态。每一个字符表示一个程序,最多可以显示 256 个程序的状态。
Scoreboard Key 上述状态的说明。以下为每一个字符符号所表示的意义:
* _:等待连结中。
* S:启动中。
* R:正在读取要求。
* W:正在送出回应。
* K:处于保持联机的状态。
* D:正在查找DNS。
* C:正在关闭连结。
* L:正在写入记录文件。
* G:进入正常结束程序中。
* I:处理闲置。
* .:尚无此程序。
Srv 本程序与其父程序的世代编号。
PID 本程序的process id。
Acc 分别表示本次联机、本程序所处理的存取次数。
M 该程序目前的状态。
CPU 该程序所耗用的CPU资源。
SS 距离上次处理要求的时间。
Req 最后一次处理要求所耗费的时间,以千分之一秒为单位。
Conn 本次联机所传送的数据量。
Child 由该子程序所传送的数据量。
Slot 由该 Slot 所传送的数据量。
Client 客户端的地址。
VHost 属于哪一个虚拟主机或本主机的IP。
Request 联机所提出的要求信息。

Nginx 状态页配置

如果你的nginx看到了--with-http_sub_module 这个模块,就代表可以启用status,使用nginx -V 就可以看到你的编译参数,如果没有的话,自行重新编译加上--with-http_sub_module 就好。
 
1、添加nginx status配置
在默认主机里面加上location或者你希望能访问到的主机里面
location /nginx_status {
stub_status on;
access_log off;
allow 10.0.1.xx;
allow 139.59.253.28;
deny all;
}

2、重启nginx
# service nginx restart3、查看status页面
# curl http://127.0.0.1/nginx_status
Active connections: 10132
server accepts handled requests
 11302 11302 11409
Reading: 0 Writing: 7 Waiting: 142第1列:
当前与http建立的连接数,包括等待的客户端连接:10132

第2列:
接受的客户端连接总数目:11302
处理的客户端连接总数目:11302
客户端总的请求数目:11409
总共处理了11302个连接 , 成功创建11302次握手, 总共处理了11409个请求

第3列:
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.
 
nginx plus (企业用户)官网(http://demo.nginx.com/status.html#)图示如下: 查看全部
ApachNginxStatus.png


Apache Server Status​设置


1、确认apache已经加载了status_module 模块
一般yum安装的apache已经在主配置文件/etc/httpd/conf/httpd.conf 里面已经加载了
LoadModule status_module modules/mod_status.so
检验如下:
[root@web1 httpd]# apachectl -M |grep -i 'status'
status_module (shared)
Syntax OK
如果是编译安装的apache,那你就可能没有安装了,编译安装的,动态添加如下:
# 进入到apache的源码mod_status.c目录
cd /usr/local/httpd-2.2.3/modules/generators
# 执行编译加载程序
/usr/local/apache/bin/apxs -i -a -c mod_status.c
# 重启httpd服务
service httpd restart
最后在用httpd -M检查模块是否已经加载,确认模块已经加载没有问题后,在httpd.conf文件增加相应的配置路径 ,引入mod_status.so的配置段:
ExtendedStatus On
<Location /Server-status>
SetHandler Server-status
Order deny,allow
Deny from all
Allow from 192.168.1.100
</Location>

说明:
  1. Deny from表示禁止的访问地址;
  2. Allow from表示允许的地址访问;
  3. ExtendedStatus On表示的是待会访问的时候能看到详细的请求信息,另外该设置仅能用于全局设置,不能在特定的虚拟主机中打开或关闭。启用扩展状态信息将会导致服务器运行效率降低。

 状态页的配置到这里就结束了,下面我们来访问一下,看看具体状态页有哪些可以利用的价值数据。
输入网址http://IP:PORT/server-status就可以看到apache状态页了。
Apache Server Status for localhost
Server Version: Apache/2.2.3 (Centos)
Server Built: Nov 9 2016 15:18:56

Current Time: Sunday, 11-Nov-2016 17:44:21 Öйú±ê׼ʱ¼ä
Restart Time: Sunday, 11-Nov-2016 17:36:28 Öйú±ê׼ʱ¼ä
Parent Server Generation: 1
Server uptime: 7 minutes 52 seconds
Total accesses: 0 - Total Traffic: 0 kB
0 requests/sec - 0 B/second -
1 requests currently being processed, 63 idle workers
______________________________________________________________W_
................................................................

Scoreboard Key:"_" Waiting for Connection, "S" Starting up, "R" Reading Request,"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,"C" Closing connection, "L" Logging, "G" Gracefully finishing,"I" Idle cleanup of worker, "." Open slot with no current process
Srv PID Acc M SS Req Conn Child Slot Client VHost Request
0-1 4140 0/0/0 W 0 287636364 0.0 0.00 0.00 127.0.0.1 192.168.0.100 GET /c-server-status HTTP/1.1

Srv Child Server number - generation
PID OS process ID
Acc Number of accesses this connection / this child / this slot
M Mode of operation
SS Seconds since beginning of most recent request
Req Milliseconds required to process most recent request
Conn Kilobytes transferred this connection
Child Megabytes transferred this child
Slot Total megabytes transferred this slot
参数分析:
字段 说明
Server Version Apache 服务器的版本。
Server Built Apache 服务器编译安装的时间。
Current Time 目前的系统时间。
Restart Time Apache 重新启动的时间。
Parent Server Generation Apache 父程序 (parent process) 的世代编号,就是 httpd 接收到 SIGHUP 而重新启动的次数。
Server uptime Apache 启动后到现在经过的时间。
Total accesses 到目前为此 Apache 接收的联机数量及传输的数据量。
CPU Usage 目前 CPU 的使用情形。
_SWSS.... 所有 Apache process 目前的状态。每一个字符表示一个程序,最多可以显示 256 个程序的状态。
Scoreboard Key 上述状态的说明。以下为每一个字符符号所表示的意义:
* _:等待连结中。
* S:启动中。
* R:正在读取要求。
* W:正在送出回应。
* K:处于保持联机的状态。
* D:正在查找DNS。
* C:正在关闭连结。
* L:正在写入记录文件。
* G:进入正常结束程序中。
* I:处理闲置。
* .:尚无此程序。
Srv 本程序与其父程序的世代编号。
PID 本程序的process id。
Acc 分别表示本次联机、本程序所处理的存取次数。
M 该程序目前的状态。
CPU 该程序所耗用的CPU资源。
SS 距离上次处理要求的时间。
Req 最后一次处理要求所耗费的时间,以千分之一秒为单位。
Conn 本次联机所传送的数据量。
Child 由该子程序所传送的数据量。
Slot 由该 Slot 所传送的数据量。
Client 客户端的地址。
VHost 属于哪一个虚拟主机或本主机的IP。
Request 联机所提出的要求信息。


Nginx 状态页配置


如果你的nginx看到了--with-http_sub_module 这个模块,就代表可以启用status,使用nginx -V 就可以看到你的编译参数,如果没有的话,自行重新编译加上--with-http_sub_module 就好。
 
1、添加nginx status配置
在默认主机里面加上location或者你希望能访问到的主机里面
 location /nginx_status {
stub_status on;
access_log off;
allow 10.0.1.xx;
allow 139.59.253.28;
deny all;
}

2、重启nginx
# service nginx restart
3、查看status页面
# curl http://127.0.0.1/nginx_status
Active connections: 10132
server accepts handled requests
 11302 11302 11409
Reading: 0 Writing: 7 Waiting: 142
第1列:
当前与http建立的连接数,包括等待的客户端连接:10132

第2列:
接受的客户端连接总数目:11302
处理的客户端连接总数目:11302
客户端总的请求数目:11409
总共处理了11302个连接 , 成功创建11302次握手, 总共处理了11409个请求

第3列:
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.
 
nginx plus (企业用户)官网(http://demo.nginx.com/status.html#)图示如下:
NginxStatus.png

Apache .htaccess 文件使用说明

开源技术Ansible 发表了文章 • 0 个评论 • 393 次浏览 • 2016-07-13 20:51 • 来自相关话题

什么是 .htaccess 文件?​

概述来说,htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。

通过 htaccess 文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

理解 WordPress 的 htaccess

# BEGIN WordPress #这是一行注释,表示 WordPress 的 htaccess 从这里开始
#如果 Apache 加载了 mod_rewrite.c 模块,则运行以下代码
RewriteEngine On #启用 mod_rewrite 引擎
RewriteBase / #设置目录重写的基准URL为 /
RewriteRule ^index\.php$ - [L] #如果请求路径是 index.php,停止重写操作(避免死循环)
RewriteCond %{REQUEST_FILENAME} !-f #如果请求的不是一个文件,继续处理
RewriteCond %{REQUEST_FILENAME} !-d #如果请求的不是一个目录,继续处理
RewriteRule . /index.php [L] #把所有的请求指向 /index.php
#结束 IfModule
# END WordPress #WordPress 的 htaccess 到这里结束

使用范例

设置错误页面
ErrorDocument 400 /error_pages/400.html
ErrorDocument 401 /error_pages/401.html
ErrorDocument 403 /error_pages/403.html
ErrorDocument 404 /error_pages/404.html
ErrorDocument 500 /error_pages/500.html

 
设置重定向
#从 old_dir 目录重定向到 new_dir 目录
Redirect /old_dir/ http://www.yourdomain.com/new_dir/index.html
#把通过二级目录访问的请求301重定向到二级域名
RedirectMatch 301 /dir/(.*) http://dir.yourdomain.com/$1
禁止指定IP访问
#禁止 IP 为 255.0.0.0 和 123.45.6.区段的 IP 访问
order allow,deny
deny from 255.0.0.0
deny from 123.45.6.
allow from all
禁止指定来源访问
#禁止从 otherdomain.com 和 anotherdomain.com 的来源访问
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} otherdomain\.com [NC,OR]
RewriteCond %{HTTP_REFERER} anotherdomain\.com
RewriteRule .* - [F]
文件防盗链
 
#从本站以外的域名访问图片,一律显示 feed.jpg
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ http://www.yourdomain.com/feed.jpg [R,L]
禁用文件夹列表
 
#如果你的文件夹没有首页文件,服务器会显示文件列表,你可以设置不显示
IndexIgnore *
#仅不显示 .zip/.jpg/.gif 格式的文件
IndexIgnore [i].zip [/i].jpg *.gif
设置文件夹首页
 
#防止显示文件夹列表,当访问文件夹时,服务器查找 index.html 为首页文件,如不存在依次向后查找
DirectoryIndex index.html index.cgi index.php
设置媒体文件为可下载的而非播放
 
AddType application/octet-stream .mp3 .mp4
自定义 HTTP 报头
Header set X-Pingback "http://www.yourdomain.com/xmlrpc.php"
Header set article-by "google.com"
设置文件过期时间 Cache Control
 
# 启用有效期控制
ExpiresActive On
# gif/png/jpg 有效期为1个月
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
# js/css 有效期为1星期
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType text/css "access plus 1 week" 查看全部
htaccess.png


什么是 .htaccess 文件?​


概述来说,htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。

通过 htaccess 文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。


理解 WordPress 的 htaccess


# BEGIN WordPress #这是一行注释,表示 WordPress 的 htaccess 从这里开始
#如果 Apache 加载了 mod_rewrite.c 模块,则运行以下代码
RewriteEngine On #启用 mod_rewrite 引擎
RewriteBase / #设置目录重写的基准URL为 /
RewriteRule ^index\.php$ - [L] #如果请求路径是 index.php,停止重写操作(避免死循环)
RewriteCond %{REQUEST_FILENAME} !-f #如果请求的不是一个文件,继续处理
RewriteCond %{REQUEST_FILENAME} !-d #如果请求的不是一个目录,继续处理
RewriteRule . /index.php [L] #把所有的请求指向 /index.php
#结束 IfModule
# END WordPress #WordPress 的 htaccess 到这里结束


使用范例


设置错误页面
ErrorDocument 400 /error_pages/400.html
ErrorDocument 401 /error_pages/401.html
ErrorDocument 403 /error_pages/403.html
ErrorDocument 404 /error_pages/404.html
ErrorDocument 500 /error_pages/500.html

 
设置重定向
#从 old_dir 目录重定向到 new_dir 目录
Redirect /old_dir/ http://www.yourdomain.com/new_dir/index.html
#把通过二级目录访问的请求301重定向到二级域名
RedirectMatch 301 /dir/(.*) http://dir.yourdomain.com/$1

禁止指定IP访问
#禁止 IP 为 255.0.0.0 和 123.45.6.区段的 IP 访问
order allow,deny
deny from 255.0.0.0
deny from 123.45.6.
allow from all

禁止指定来源访问
#禁止从 otherdomain.com 和 anotherdomain.com 的来源访问
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} otherdomain\.com [NC,OR]
RewriteCond %{HTTP_REFERER} anotherdomain\.com
RewriteRule .* - [F]

文件防盗链
 
#从本站以外的域名访问图片,一律显示 feed.jpg
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ http://www.yourdomain.com/feed.jpg [R,L]

禁用文件夹列表
 
#如果你的文件夹没有首页文件,服务器会显示文件列表,你可以设置不显示
IndexIgnore *
#仅不显示 .zip/.jpg/.gif 格式的文件
IndexIgnore [i].zip [/i].jpg *.gif

设置文件夹首页
 
#防止显示文件夹列表,当访问文件夹时,服务器查找 index.html 为首页文件,如不存在依次向后查找
DirectoryIndex index.html index.cgi index.php

设置媒体文件为可下载的而非播放
 
AddType application/octet-stream .mp3 .mp4

自定义 HTTP 报头
Header set X-Pingback "http://www.yourdomain.com/xmlrpc.php"
Header set article-by "google.com"

设置文件过期时间 Cache Control
 
# 启用有效期控制
ExpiresActive On
# gif/png/jpg 有效期为1个月
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
# js/css 有效期为1星期
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType text/css "access plus 1 week"

解决Apache child pid 22404 exit signal Segmentation fault (11)错误

开源技术Ansible 发表了文章 • 0 个评论 • 608 次浏览 • 2016-07-07 22:31 • 来自相关话题

新搭建的测试环境用的Apache/2.2.15,然后测试的时候,页面报502,最后查看Apache的log日志如下:
[Wed Jul 07 11:36:03 2016] [notice] child pid 22404 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22424 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22404 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22424 exit signal Segmentation fault (11)
为了解决这个问题,网上搜了几个方法都无法解决,然后网上有人说是Apache的一个bug,是内存问题,最后我只能写个脚本处理。
 
1、检查服务器
[root@uweb1 atom]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m

[root@uweb1 atom]# uname -r
2.6.32-573.22.1.el6.x86_64[root@uweb1 atom]# slabtop
Active / Total Objects (% used) : 262463 / 284128 (92.4%)
Active / Total Slabs (% used) : 18670 / 18670 (100.0%)
Active / Total Caches (% used) : 92 / 172 (53.5%)
Active / Total Size (% used) : 74471.91K / 77331.03K (96.3%)
Minimum / Average / Maximum Object : 0.02K / 0.27K / 4096.00K

OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
103452 103431 99% 0.10K 2796 37 11184K buffer_head
34000 33764 99% 0.98K 8500 4 34000K ext4_inode_cache
33240 33240 100% 0.19K 1662 20 6648K dentry
17024 16889 99% 0.03K 152 112 608K size-32
15323 7993 52% 0.05K 199 77 796K anon_vma_chain
13148 8203 62% 0.20K 692 19 2768K vm_area_struct
11151 9723 87% 0.06K 189 59 756K size-64
7616 7071 92% 0.55K 1088 7 4352K radix_tree_node
7261 7251 99% 0.07K 137 53 548K selinux_inode_security
6767 3720 54% 0.05K 101 67 404K anon_vma
6534 6527 99% 0.14K 242 27 968K sysfs_dir_cache
4404 4404 100% 0.58K 734 6 2936K inode_cache
3816 3767 98% 0.07K 72 53 288K Acpi-Operand
2580 1833 71% 0.12K 86 30 344K size-128
2400 1523 63% 0.25K 160 15 640K filp
2208 2199 99% 0.04K 24 92 96K Acpi-Namespace
2080 2008 96% 0.19K 104 20 416K size-192
1782 1782 100% 0.64K 297 6 1188K proc_inode_cache
756 744 98% 1.00K 189 4 756K size-1024 
其实apache报[notice] child pid 1421 exit signal Segmentation fault (11),绝大部分是内存泄露的问题,网上的禁止proxy和cache模块,经过我试验没有效果,修改php内存也一样。
 
2、解决内存泄露脚本
#!/bin/bash
time=`date`
echo $time > /tmp/clear_cached.txt

echo "total/used/free/shared/buffers/cached" >> /tmp/clear_cached.txt
echo "Cleart Before" >> /tmp/clear_cached.txt
free -m|grep Mem: >> /tmp/clear_cached.txt
sync;
echo 2 > /proc/sys/vm/drop_caches;
echo 0 > /proc/sys/vm/drop_caches;
echo "Clear After" >> /tmp/clear_cached.txt
free -m|grep Mem: >> /tmp/clear_cached.txt 查看全部
新搭建的测试环境用的Apache/2.2.15,然后测试的时候,页面报502,最后查看Apache的log日志如下:
[Wed Jul 07 11:36:03 2016] [notice] child pid 22404 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22424 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22404 exit signal Segmentation fault (11)
[Wed Jul 07 11:36:03 2016] [notice] child pid 22424 exit signal Segmentation fault (11)

为了解决这个问题,网上搜了几个方法都无法解决,然后网上有人说是Apache的一个bug,是内存问题,最后我只能写个脚本处理。
 
1、检查服务器
[root@uweb1 atom]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m

[root@uweb1 atom]# uname -r
2.6.32-573.22.1.el6.x86_64
[root@uweb1 atom]# slabtop
Active / Total Objects (% used) : 262463 / 284128 (92.4%)
Active / Total Slabs (% used) : 18670 / 18670 (100.0%)
Active / Total Caches (% used) : 92 / 172 (53.5%)
Active / Total Size (% used) : 74471.91K / 77331.03K (96.3%)
Minimum / Average / Maximum Object : 0.02K / 0.27K / 4096.00K

OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
103452 103431 99% 0.10K 2796 37 11184K buffer_head
34000 33764 99% 0.98K 8500 4 34000K ext4_inode_cache
33240 33240 100% 0.19K 1662 20 6648K dentry
17024 16889 99% 0.03K 152 112 608K size-32
15323 7993 52% 0.05K 199 77 796K anon_vma_chain
13148 8203 62% 0.20K 692 19 2768K vm_area_struct
11151 9723 87% 0.06K 189 59 756K size-64
7616 7071 92% 0.55K 1088 7 4352K radix_tree_node
7261 7251 99% 0.07K 137 53 548K selinux_inode_security
6767 3720 54% 0.05K 101 67 404K anon_vma
6534 6527 99% 0.14K 242 27 968K sysfs_dir_cache
4404 4404 100% 0.58K 734 6 2936K inode_cache
3816 3767 98% 0.07K 72 53 288K Acpi-Operand
2580 1833 71% 0.12K 86 30 344K size-128
2400 1523 63% 0.25K 160 15 640K filp
2208 2199 99% 0.04K 24 92 96K Acpi-Namespace
2080 2008 96% 0.19K 104 20 416K size-192
1782 1782 100% 0.64K 297 6 1188K proc_inode_cache
756 744 98% 1.00K 189 4 756K size-1024
 
其实apache报[notice] child pid 1421 exit signal Segmentation fault (11),绝大部分是内存泄露的问题,网上的禁止proxy和cache模块,经过我试验没有效果,修改php内存也一样。
 
2、解决内存泄露脚本
#!/bin/bash
time=`date`
echo $time > /tmp/clear_cached.txt

echo "total/used/free/shared/buffers/cached" >> /tmp/clear_cached.txt
echo "Cleart Before" >> /tmp/clear_cached.txt
free -m|grep Mem: >> /tmp/clear_cached.txt
sync;
echo 2 > /proc/sys/vm/drop_caches;
echo 0 > /proc/sys/vm/drop_caches;
echo "Clear After" >> /tmp/clear_cached.txt
free -m|grep Mem: >> /tmp/clear_cached.txt

Apache Struts 远程代码执行漏洞安全预警(CVE-2016-0785/CVE-2016-4438)

开源技术Geek小A 发表了文章 • 0 个评论 • 342 次浏览 • 2016-07-01 23:14 • 来自相关话题

近日struts2官方发布了多个安全漏洞,其中S2-036,S2-037分别为2个远程代码执行漏洞(CVE-2016-0785,CVE-2016-4438),被攻击者利用可获取Struts程序的权限远程执行任意命令。
 
影响版本:
        Struts 2.3.20 - Struts 2.3.28.1
 
漏洞描述:
        S2-036漏洞:该漏洞与前期爆发的S2-029类似,在开启强制OGNL double evaluation的情况下,攻击者用可以将构造的特定代码放入标签属性,从而达到远程代码执行的目的。(由于需要开发者使用了特定的代码写法才会导致漏洞,因此官方将该漏洞风险等级调整为中级)
 
漏洞详情:https://cwiki.apache.org/confluence/display/WW/S2-036 
        S2-037漏洞:该漏洞被官方定级为高危,若服务端使用到REST插件,攻击者可远程传递一个恶意的表达式实现远程代码执行攻击。
 
漏洞详情:https://cwiki.apache.org/confluence/display/WW/S2-037 
 
漏洞验证:
        检查您当前的struts2版本,若版本在受影响版本范围,且使用到REST插件,说明存在漏洞。

        修复方案:
        如果您使用了Struts2并在受影响版本内,我们建议您尽快按照如下方案进行修复:
        1、在使用的标签属性中对每一个传入的参数值进行适当的验证;
        2、定期定日备份数据以及源代码,在被攻击第一时间恢复和还原;
        3、目前官方已经推出了Struts 2.3.29和Struts 2.5.1修复这几个问题,大家可以针对自己所使用的版本进行升级(推荐)
        下载地址:https://github.com/apache/struts/releases/ 
 

Struts2作为广泛应用的Web框架,安全问题一直层出不穷。为了保证安全,建议您在业务处理中不应信任用户提交上来的任何数据,做好安全过滤。最好能在Ognl的执行入口加入过滤黑名单,并及时将Struts更新到最新版本。 查看全部

近日struts2官方发布了多个安全漏洞,其中S2-036,S2-037分别为2个远程代码执行漏洞(CVE-2016-0785,CVE-2016-4438),被攻击者利用可获取Struts程序的权限远程执行任意命令。
 
影响版本:
        Struts 2.3.20 - Struts 2.3.28.1
 
漏洞描述:
        S2-036漏洞:该漏洞与前期爆发的S2-029类似,在开启强制OGNL double evaluation的情况下,攻击者用可以将构造的特定代码放入标签属性,从而达到远程代码执行的目的。(由于需要开发者使用了特定的代码写法才会导致漏洞,因此官方将该漏洞风险等级调整为中级)
 
漏洞详情https://cwiki.apache.org/confluence/display/WW/S2-036 
        S2-037漏洞:该漏洞被官方定级为高危,若服务端使用到REST插件,攻击者可远程传递一个恶意的表达式实现远程代码执行攻击。
 
漏洞详情:https://cwiki.apache.org/confluence/display/WW/S2-037 
 
漏洞验证:
        检查您当前的struts2版本,若版本在受影响版本范围,且使用到REST插件,说明存在漏洞。

        修复方案:
        如果您使用了Struts2并在受影响版本内,我们建议您尽快按照如下方案进行修复:
        1、在使用的标签属性中对每一个传入的参数值进行适当的验证;
        2、定期定日备份数据以及源代码,在被攻击第一时间恢复和还原;
        3、目前官方已经推出了Struts 2.3.29和Struts 2.5.1修复这几个问题,大家可以针对自己所使用的版本进行升级(推荐)
        下载地址:https://github.com/apache/struts/releases/ 
 

Struts2作为广泛应用的Web框架,安全问题一直层出不穷。为了保证安全,建议您在业务处理中不应信任用户提交上来的任何数据,做好安全过滤。最好能在Ognl的执行入口加入过滤黑名单,并及时将Struts更新到最新版本。

Apache Module加载问题记录

开源技术koyo 发表了文章 • 0 个评论 • 473 次浏览 • 2016-06-19 22:04 • 来自相关话题

问题1:
Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration 解决方法:
LoadModule authz_host_module modules/mod_authz_host.so问题2:
Invalid command 'CustomLog', perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule log_config_module modules/mod_log_config.so问题3:
设置了DirectoryIndex index.html index.php 却仍然不能默认访问: index.php解决方法:
LoadModule dir_module modules/mod_dir.so问题4:
Invalid command ‘Require’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule authz_core_module modules/mod_authz_core.so问题5:
Invalid command ‘DirectoryIndex’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule dir_module modules/mod_dir.so问题6:
Unknown Authz provider: all 解决方法:
LoadModule authz_host_module modules/mod_authz_host.so问题7:
Invalid command ‘Alias’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule alias_module modules/mod_alias.so问题8:
Invalid command ‘Allow’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule authn_core_module modules/mod_authn_core.so问题9:
Invalid command ‘AddHandler’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule mime_module modules/mod_mime.so问题10:
Invalid command ‘AuthType’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule authn_core_module modules/mod_authn_core.so问题11:
Invalid command ‘AuthUserFile’, perhaps misspelled or defined by a module not included in the server configuration解决方法:
LoadModule authn_file_module modules/mod_authn_file.so问题12:
Unknown Authz provider: valid-user解决方法:
LoadModule authz_user_module modules/mod_authz_user.so问题13:
Server MUST relinquish startup privileges before accepting connections. Please ensure mod_unixd or other system security module is loaded.解决方法:
LoadModule unixd_module modules/mod_unixd.so 查看全部
问题1:
Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration 
解决方法:
LoadModule authz_host_module modules/mod_authz_host.so
问题2:
Invalid command 'CustomLog', perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule log_config_module modules/mod_log_config.so
问题3:
设置了DirectoryIndex index.html index.php 却仍然不能默认访问: index.php
解决方法:
LoadModule dir_module modules/mod_dir.so
问题4:
Invalid command ‘Require’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule authz_core_module modules/mod_authz_core.so
问题5:
Invalid command ‘DirectoryIndex’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule dir_module modules/mod_dir.so
问题6:
Unknown Authz provider: all 
解决方法:
LoadModule authz_host_module modules/mod_authz_host.so
问题7:
Invalid command ‘Alias’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule alias_module modules/mod_alias.so
问题8:
Invalid command ‘Allow’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule authn_core_module modules/mod_authn_core.so
问题9:
Invalid command ‘AddHandler’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule mime_module  modules/mod_mime.so
问题10:
Invalid command ‘AuthType’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule authn_core_module modules/mod_authn_core.so
问题11:
Invalid command ‘AuthUserFile’, perhaps misspelled or defined by a module not included in the server configuration
解决方法:
LoadModule authn_file_module modules/mod_authn_file.so
问题12:
Unknown Authz provider: valid-user
解决方法:
LoadModule authz_user_module modules/mod_authz_user.so
问题13:
Server MUST relinquish startup privileges before accepting connections.  Please ensure mod_unixd or other system security module is loaded.
解决方法:
LoadModule unixd_module modules/mod_unixd.so

利用Apache的X-Forwarded-For配置屏蔽IP

开源技术being 发表了文章 • 0 个评论 • 477 次浏览 • 2016-06-07 17:34 • 来自相关话题

线上站点更新了登录方式,从验证码变成了拼图,但是不知道为什么引发了一个漏洞,导致有人不停的刷登录页面,尝试破解什么的,还好这个人发出的请求频率较高,但是访问源都是一个ip,log如下:219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
一秒钟你刷好几十次这还是一台服务器,判断为非正常,先用Iptables屏蔽掉!iptables -I INPUT -s 219.146.239.138 -j DROP看看效果,哎?怎么还访问的那么欢实,突然想起来,这些服务器是 haproxy 转过来的,日志格式里的ip地址是X-Forwarded-For,我总不能跑haproxy上去加iptables吧!<Directory /data/vhosts/htdocs/>
SetEnvIf X-Forwarded-For "^(219\.146\.239\.138)" Deny1
Options None
AllowOverride None
Order deny,allow
Deny from all
Allow from env=Deny1
</Directory>好了,再看看全部403,这种方法防护小规模的刷洗还是可以的,但是大规模的需要做自动发现和自动添加防护! 查看全部
线上站点更新了登录方式,从验证码变成了拼图,但是不知道为什么引发了一个漏洞,导致有人不停的刷登录页面,尝试破解什么的,还好这个人发出的请求频率较高,但是访问源都是一个ip,log如下:
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"
219.146.239.138 - - [18/Mar/2015:10:44:12 +0800] 0 "POST /signin"

一秒钟你刷好几十次这还是一台服务器,判断为非正常,先用Iptables屏蔽掉!
iptables -I INPUT -s 219.146.239.138 -j DROP
看看效果,哎?怎么还访问的那么欢实,突然想起来,这些服务器是 haproxy 转过来的,日志格式里的ip地址是X-Forwarded-For,我总不能跑haproxy上去加iptables吧!
<Directory /data/vhosts/htdocs/>
SetEnvIf X-Forwarded-For "^(219\.146\.239\.138)" Deny1
Options None
AllowOverride None
Order deny,allow
Deny from all
Allow from env=Deny1
</Directory>
好了,再看看全部403,这种方法防护小规模的刷洗还是可以的,但是大规模的需要做自动发现和自动添加防护!

OpenSSL CVE-2016-0800高危漏洞安全

开源技术Geek小A 发表了文章 • 0 个评论 • 434 次浏览 • 2016-05-24 10:17 • 来自相关话题

3月1日OpenSSL.org官方发布一个OpenSSL的高危漏洞(CVE-2016-0800,别名"DROWN")。该漏洞可能被黑客利用进行中间人攻击,窃取HTTPS加密数据的内容。OpenSSL官方已发布修复方案,建议各位用户关注并尽快升级系统修复漏洞!
        详情请查看官方公告:https://www.openssl.org/news/secadv/20160301.txt
        受影响的服务版本:
        Apache: 非2.4.x版本
        Nginx: 0.7.64、0.8.18及更早版本
        Postfix: 早于2.9.14、2.10.8、2.11.6、3.0.2的版本 (2015.07.20之前发布的版本)
        Openssl: 1.0.2a、1.0.1m、1.0.0r、0.9.8zf及更早版本
        OpenSSL版本检测:
        openssl version
        若版本低于修复版本请更新openssl
        针对web server,可通过如下方法检测:

        openssl s_client -connect 待测域名或IP地址:443 -ssl2
        漏洞修复方案:

        对于已经运行的云服务器,UCLOUD软件源已经提供了修复漏洞的openssl软件包,您可以通过手动更新openssl进行修复。
        详细修复方法如下:
        1、CentOS版本:
        yum clean all & yum makecache
        yum -y update openssl
        2、Ubuntu\Debian版本:
        sudo apt-get update
        sudo apt-get install libssl1.0.0
        若不想立即进行升级,您可以禁用sslv2协议,操作方法如下:

        1)Apache禁用sslv2协议:
        在Apache的SSL配置文件中禁用SSLv2协议(建议同时禁用SSLv3),确保SSLProtocol配置项内容如下:
        SSLProtocol All -SSLv2
        配置完毕,重启apache服务。
        2)Nginx禁用sslv2协议:
        修改nginx的SSL配置文件,设置只允许使用TLS协议,确保ssl_protocols配置项内容如下:
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2
        配置完毕,重启nginx服务 查看全部

3月1日OpenSSL.org官方发布一个OpenSSL的高危漏洞(CVE-2016-0800,别名"DROWN")。该漏洞可能被黑客利用进行中间人攻击,窃取HTTPS加密数据的内容。OpenSSL官方已发布修复方案,建议各位用户关注并尽快升级系统修复漏洞!
        详情请查看官方公告:https://www.openssl.org/news/secadv/20160301.txt
        受影响的服务版本:
        Apache: 非2.4.x版本
        Nginx: 0.7.64、0.8.18及更早版本
        Postfix: 早于2.9.14、2.10.8、2.11.6、3.0.2的版本 (2015.07.20之前发布的版本)
        Openssl: 1.0.2a、1.0.1m、1.0.0r、0.9.8zf及更早版本
        OpenSSL版本检测:
        openssl version
        若版本低于修复版本请更新openssl
        针对web server,可通过如下方法检测:

        openssl s_client -connect 待测域名或IP地址:443 -ssl2
        漏洞修复方案:

        对于已经运行的云服务器,UCLOUD软件源已经提供了修复漏洞的openssl软件包,您可以通过手动更新openssl进行修复。
        详细修复方法如下:
        1、CentOS版本:
        yum clean all & yum makecache
        yum -y update openssl
        2、Ubuntu\Debian版本:
        sudo apt-get update
        sudo apt-get install libssl1.0.0
        若不想立即进行升级,您可以禁用sslv2协议,操作方法如下:

        1)Apache禁用sslv2协议:
        在Apache的SSL配置文件中禁用SSLv2协议(建议同时禁用SSLv3),确保SSLProtocol配置项内容如下:
        SSLProtocol All -SSLv2
        配置完毕,重启apache服务。
        2)Nginx禁用sslv2协议:
        修改nginx的SSL配置文件,设置只允许使用TLS协议,确保ssl_protocols配置项内容如下:
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2
        配置完毕,重启nginx服务

Apache Struts s2-033 远程代码执行漏洞预警(CVE-2016-3087)

开源技术Geek小A 发表了文章 • 0 个评论 • 801 次浏览 • 2016-05-24 10:15 • 来自相关话题

近日struts2官方发布了1个远程代码执行漏洞(CVE-2016-3087),该漏洞主要影响Struts 2.3.20 - Struts 2.3.28 (除2.3.20.3、2.3.24.3、2.3.28.1)版本,攻击者可利用该漏洞获取Struts程序的权限远程执行任意命令。

        受影响版本:
        Struts 2.3.20 - Struts 2.3.28 (2.3.20.3、2.3.24.3、2.3.28.1除外)

        漏洞描述:
        使用到REST插件的Struts2应用,在开启动态方法调用(DMI)的情况下,会被攻击者实现远程代码执行攻击。
        https://cwiki.apache.org/confluence/display/WW/S2-033 

        漏洞验证:
        检查Struts2的配置文件struts.xml,确认“struts.enable.DynamicMethodInvocation” 是否为“true",如为“true",且版本在受影响版本范围内,则说明受影响,否则不受影响。

        修复方案:
        如果您使用了Struts2并在受影响版本内,我们建议您尽快按照如下方案进行修复:
        1、禁用动态方法调用(DMI),修改Struts2的配置文件struts.xml,将struts.enable.DynamicMethodInvocation设置为“false”;
        2、目前官方已经推出了2.3.20.3、2.3.24.3和2.3.28.1修复这个问题,大家可以针对自己所使用的版本进行升级。下载地址:https://struts.apache.org/download.cgi#struts23281 查看全部
近日struts2官方发布了1个远程代码执行漏洞(CVE-2016-3087),该漏洞主要影响Struts 2.3.20 - Struts 2.3.28 (除2.3.20.3、2.3.24.3、2.3.28.1)版本,攻击者可利用该漏洞获取Struts程序的权限远程执行任意命令。

        受影响版本:
        Struts 2.3.20 - Struts 2.3.28 (2.3.20.3、2.3.24.3、2.3.28.1除外)

        漏洞描述:
        使用到REST插件的Struts2应用,在开启动态方法调用(DMI)的情况下,会被攻击者实现远程代码执行攻击。
        https://cwiki.apache.org/confluence/display/WW/S2-033 

        漏洞验证:
        检查Struts2的配置文件struts.xml,确认“struts.enable.DynamicMethodInvocation” 是否为“true",如为“true",且版本在受影响版本范围内,则说明受影响,否则不受影响。

        修复方案:
        如果您使用了Struts2并在受影响版本内,我们建议您尽快按照如下方案进行修复:
        1、禁用动态方法调用(DMI),修改Struts2的配置文件struts.xml,将struts.enable.DynamicMethodInvocation设置为“false”;
        2、目前官方已经推出了2.3.20.3、2.3.24.3和2.3.28.1修复这个问题,大家可以针对自己所使用的版本进行升级。下载地址:https://struts.apache.org/download.cgi#struts23281

负载均衡软件和Web应用服务器详解

开源技术Rock 发表了文章 • 0 个评论 • 658 次浏览 • 2016-04-03 23:10 • 来自相关话题

为什么我们使用软件负载均衡​

[]海量并发下分散请求,减轻服务压力,分布式部署,容灾,解决单点问题,端口复用节约服务器资源[/][]硬件负载均衡成本较高,设备维护较为复杂,稳定性高[/][]nginx haproxy lvs(piranha)[/][]php+fastcgi,modjk+tomcat [/]

软件负责均衡原理

负载均衡分为七层和四层负载均衡,是由通信协议决定均衡模式,如SSL 443是TCP模式,http请求是应用层模式,然后按照一定的调度算法把请求调度到相应的节点
[]在统一接入层进行请求调度均衡[/][]按照服务器性能调度请求,权值调整[/][]业务层逻辑解耦,按照URL分发[/][]IP层,按照网段分发[/][]容灾 [/][]自适应性调度(nginx+fasctcgi,modjk+apache)[/]
注意事项:
[]服务是否长连接 [/][]是否会话黏贴 [/][]32位系统和64位系统网络中断问题[/][]安全相关  [/][]维护成本 [/][]节点生存检测 [/][]算法选择[/][]避免跨IDC 跨网段 跨楼层[/]

负责均衡软件特点

LVS特点:
[]抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生;[/][]稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)[/][]应用范围比较广,可以对所有应用做负载均衡;[/][]不支持正则处理,不能做动静分离。 [/]
常用四种算法:
[]rr:轮叫,轮流分配到后端服务器;[/][]wrr:权重轮叫,根据后端服务器负载情况来分配;[/][]lc:最小连接,分配已建立连接最少的服务器上;[/][]wlc:权重最小连接,根据后端服务器处理能力来分配。[/]
可以采用ipvsadm –p(persistence)来保持session,默认是300/s 。
 
Nginx特点:
[]工作在7层,可以对做正则规则处理;(如:针对域名、目录进行分流)[/][]配置简单,能ping通就能进行负载功能,可以通过端口检测后端服务器状态,不支持url检测;[/][]抗高并发,采用epoll网络模型处理客户请求;[/][]支持HTTP、TCP和EMail,应用范围比较少;[/][]nginx主要是HTTP和反向代理服务器,低系统资源消耗。[/]
常用四种算法:
[]RR:(默认)轮询,轮流分配到后端服务器;[/][]weight:根据后端服务器性能分配;[/][]ip_hash:每个请求按访问ip的hash结果进行分配,并发小时合适,解决session问题;[/][]fair:(扩展策略),默认不被编译nginx内核,根据后端服务器响应时间判断负载情况,选择最轻的进行处理。 [/]
 
Haproxy特点:
[]支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;[/][]配置简单,支持url检测后端服务器状态;[/][]仅做负载均衡软件使用,在高并发情况下,处理速度高于nginx;[/][]TCP层多用于Mysql从(读)服务器负载均衡。 [/]
常用四种算法:
[]roundrobin:轮询,轮流分配到后端服务器;[/][]static-rr:根据后端服务器性能分配;[/][]leastconn:最小连接者优先处理;[/][]source:根据请求源IP,与Nginx的IP_Hash类似。[/]

为什么要解决session会话

负载均衡环境下,每个用户都有可能不固定的访问后端服务器,在有些应用情况下,是必须要求在一定时间内同一用户访问的所有请求都分配给后端同一台服务器去处理,例如:电子商务网站,用户注册页面等,一刷新页面,就会分配到后端的另一台服务器上,那刚才的页面上的信息也都没了,这种情况下,分配同一台服务器处理请求是至关重要的!

Web应用服务器对比

主流应用服务器:
[]Apache后台服务器(主要处理php及一些功能请求 如:中文url)[/][]Nginx前端服务器(利用它占用系统资源少得优势来处理静态页面 大量请求)[/][]Lighttpd 图片服务器[/]
总体来说,随着nginx功能得完善将使他成为今后web server的主流。
三种服务器对比: 查看全部


为什么我们使用软件负载均衡​


    []海量并发下分散请求,减轻服务压力,分布式部署,容灾,解决单点问题,端口复用节约服务器资源[/][]硬件负载均衡成本较高,设备维护较为复杂,稳定性高[/][]nginx haproxy lvs(piranha)[/][]php+fastcgi,modjk+tomcat [/]


软件负责均衡原理


负载均衡分为七层和四层负载均衡,是由通信协议决定均衡模式,如SSL 443是TCP模式,http请求是应用层模式,然后按照一定的调度算法把请求调度到相应的节点
    []在统一接入层进行请求调度均衡[/][]按照服务器性能调度请求,权值调整[/][]业务层逻辑解耦,按照URL分发[/][]IP层,按照网段分发[/][]容灾 [/][]自适应性调度(nginx+fasctcgi,modjk+apache)[/]

注意事项:
    []服务是否长连接 [/][]是否会话黏贴 [/][]32位系统和64位系统网络中断问题[/][]安全相关  [/][]维护成本 [/][]节点生存检测 [/][]算法选择[/][]避免跨IDC 跨网段 跨楼层[/]


负责均衡软件特点


LVS特点:
    []抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生;[/][]稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)[/][]应用范围比较广,可以对所有应用做负载均衡;[/][]不支持正则处理,不能做动静分离。 [/]

常用四种算法:
    []rr:轮叫,轮流分配到后端服务器;[/][]wrr:权重轮叫,根据后端服务器负载情况来分配;[/][]lc:最小连接,分配已建立连接最少的服务器上;[/][]wlc:权重最小连接,根据后端服务器处理能力来分配。[/]

可以采用ipvsadm –p(persistence)来保持session,默认是300/s 。
 
Nginx特点:
    []工作在7层,可以对做正则规则处理;(如:针对域名、目录进行分流)[/][]配置简单,能ping通就能进行负载功能,可以通过端口检测后端服务器状态,不支持url检测;[/][]抗高并发,采用epoll网络模型处理客户请求;[/][]支持HTTP、TCP和EMail,应用范围比较少;[/][]nginx主要是HTTP和反向代理服务器,低系统资源消耗。[/]

常用四种算法:
    []RR:(默认)轮询,轮流分配到后端服务器;[/][]weight:根据后端服务器性能分配;[/][]ip_hash:每个请求按访问ip的hash结果进行分配,并发小时合适,解决session问题;[/][]fair:(扩展策略),默认不被编译nginx内核,根据后端服务器响应时间判断负载情况,选择最轻的进行处理。 [/]

 
Haproxy特点:
    []支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;[/][]配置简单,支持url检测后端服务器状态;[/][]仅做负载均衡软件使用,在高并发情况下,处理速度高于nginx;[/][]TCP层多用于Mysql从(读)服务器负载均衡。 [/]

常用四种算法:
    []roundrobin:轮询,轮流分配到后端服务器;[/][]static-rr:根据后端服务器性能分配;[/][]leastconn:最小连接者优先处理;[/][]source:根据请求源IP,与Nginx的IP_Hash类似。[/]


为什么要解决session会话


负载均衡环境下,每个用户都有可能不固定的访问后端服务器,在有些应用情况下,是必须要求在一定时间内同一用户访问的所有请求都分配给后端同一台服务器去处理,例如:电子商务网站,用户注册页面等,一刷新页面,就会分配到后端的另一台服务器上,那刚才的页面上的信息也都没了,这种情况下,分配同一台服务器处理请求是至关重要的!


Web应用服务器对比


主流应用服务器:
    []Apache后台服务器(主要处理php及一些功能请求 如:中文url)[/][]Nginx前端服务器(利用它占用系统资源少得优势来处理静态页面 大量请求)[/][]Lighttpd 图片服务器[/]

总体来说,随着nginx功能得完善将使他成为今后web server的主流。
三种服务器对比:
db.png

Apache无法解析PHP代码问题分析

开源技术Ansible 发表了文章 • 0 个评论 • 964 次浏览 • 2015-09-11 21:19 • 来自相关话题

源码安装Apache 和PHP, Apache的版本是httpd-2.2.12.tar.gz,PHP的版本是php-5.3.6.tar.gz
Apache编译参数如下:./configure --prefix=/usr/local/apache2 --disable-authn-file --disable-authn-default --disable-authz-groupfile --disable-authz-user --disable-authz-default --disable-auth-basic --disable-include --enable-so --with-mpm=prefork PHP编译参数如下:./configure --prefix=/usr/local/php5.3.6 --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring --with-curl --with-openssl --with-zlib --enable-sockets --enable-ftp --with-mysql --with-openssl --with-gd --with-png-dir --with-jpeg-dir --with-freetype-dir --enable-sockets --enable-pcntl --with-mhash --with-mcrypt --enable-bcmath --with-gettext --enable-zip --with-pdo-mysql安装完PHP后将安装源文件中的 cp php.ini-dist     /usr/local/php5.3.6/lib/php.ini
 
安装完成后配置Apache,写个php的info页面test.php:<?php
phpinfo();
?>然后用浏览器访问test.php,页面出现的是test.php文件中的内容,并不是php的info信息。
 
在Apache中的配置文件httpd.conf中添加AddType application/x-httpd-php .php,重启APACHE,还是出现同样的错误。
 
而且Apache的配置文件已经加载了PHP的模块LoadModule php5_module        modules/libphp5.so。最后发现是由于Apache的配置文件缺少如下的配置:AddType application/x-httpd-php .php
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps然后重启Apache,代码可以正常解析了!
  查看全部
源码安装Apache 和PHP, Apache的版本是httpd-2.2.12.tar.gz,PHP的版本是php-5.3.6.tar.gz
Apache编译参数如下:
./configure --prefix=/usr/local/apache2 --disable-authn-file --disable-authn-default --disable-authz-groupfile --disable-authz-user --disable-authz-default --disable-auth-basic --disable-include --enable-so --with-mpm=prefork 
PHP编译参数如下:
./configure --prefix=/usr/local/php5.3.6 --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring --with-curl --with-openssl  --with-zlib --enable-sockets --enable-ftp  --with-mysql --with-openssl --with-gd --with-png-dir --with-jpeg-dir  --with-freetype-dir --enable-sockets  --enable-pcntl --with-mhash --with-mcrypt --enable-bcmath --with-gettext --enable-zip --with-pdo-mysql
安装完PHP后将安装源文件中的 cp php.ini-dist     /usr/local/php5.3.6/lib/php.ini
 
安装完成后配置Apache,写个php的info页面test.php:
<?php
phpinfo();
?>
然后用浏览器访问test.php,页面出现的是test.php文件中的内容,并不是php的info信息。
 
在Apache中的配置文件httpd.conf中添加AddType application/x-httpd-php .php,重启APACHE,还是出现同样的错误。
 
而且Apache的配置文件已经加载了PHP的模块LoadModule php5_module        modules/libphp5.so。最后发现是由于Apache的配置文件缺少如下的配置:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps
然后重启Apache,代码可以正常解析了!
 
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。同时Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。