ApacheHttp
- 1: apache日志记录真实ip-
- 2: apache限制某个目录下的php文件没有执行权限
- 3: apache在虚拟主机中实现用户验证
- 4: httpd2.4不能查看状态
- 5: 安装ApacheHttp
- 6: 禁止ip访问
- 7: 设置不允许访问文件
- 8: 自定义header
1 - apache日志记录真实ip-
默认情况下log日志格式为: LogFormat “%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"” combined 其中%h 是记录访问者的IP,如果在web的前端有一层代理,那么这个%h其实就是代理机器的IP,这不是我们想要的。在这种情况下, %{X-FORWARDED-FOR}i 字段会记录客户端真实的IP。所以log日志改为: LogFormat “%h %{X-FORWARDED-FOR}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"” combined
2 - apache限制某个目录下的php文件没有执行权限
为了安全期间,有时我们需要限制网站下的某些目录对于php脚本不能执行。 有两种方法可以参考:
- 使用.htaccess 文件限制
在要限制php执行的目录下,创建.htaccess文件,加入内容
php_flag engine off
- 使用apache的配置文件httpd.conf
在相关的虚拟主机段,加入
<Directory /www/htdocs/path>
php_admin_flag engine off
<filesmatch "(.*)php">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</filesmatch>
</Directory>
3 - apache在虚拟主机中实现用户验证
##两种方法
方法一
虚拟主机配置文件中,需要加入 <Directory /data/web/test> AllowOverride AuthConfig
然后在虚拟主机的主目录,即DocumentRoot 目录下 vi /data/web/test/.htaccess
加入 AuthName “frank share web” AuthType Basic 这种要重启 下面的那种不需要重启 AuthUserFile /data/web/test/.htpasswd require valid-user
保存后,然后 创建apache的验证用户
htpasswd -c /data/web/test/.htpasswd test #第一次创建用户要用到-c 参数 第2次添加用户,就不用-c参数
如果你想修改密码,可以如下
htpasswd -m .htpasswd test2
重启apache,即可。
方法二
到此,你已经配置完成。下面介绍另一种方式: ################################## vi http.conf 在相应的虚拟主机配置文件段,加入 <Directory *> AllowOverride AuthConfig AuthName “自定义的” AuthType Basic AuthUserFile /data/.htpasswd // 这个目录你可以随便写一个,没有限制 require valid-user
保存后,然后 创建apache的验证用户
htpasswd 默认创建的密码只有前8位有效
按照如下命令创建密码 htpasswd -c .htpasswd user1 假如,密码为123456789 那么访问时,不管是输入 12345678 还是 123456789 甚至是 123456781234 都能顺利通过验证。这是为什么呢? htpasswd默认情况,是使用系统库中的crypt()函数来对密码明文进行单向加密的。在网上找到该函数的说明: crypt()将使用Data Encryption Standard(DES)演算法将参数key所指的字符串加以编码,key字符串长度仅取前8个字符,超过此长度的字符没有意义。参数salt为两个字 符组成的字符串,由a-z,A-Z,0-9,".",和"/“所组成,用来决定使用4096种不同内建表格的哪一个。函数执行成功后会返回指向编码过的字符串指针,参数key所指的字符串不会有所更动。编码过的字符串长度为13个字符,前两个字符为参数salt代表的字符串。
所以,如果你想创建超过8位的密码,请使用-m参数或者-s 参数,这两个参数分别表示创建的密码以MD5加密方式加密和以SHA方式加密。 htpasswd -c -m .htpasswd user1 这样创建的密码没有8位数限制了。
4 - httpd2.4不能查看状态
httpd无法apachectl status 直接查看状态,虽然没有大的影响。
但是让人十分不悦。解决方法如下。
1,先加查模块是否存在
[root@jingwangweilai ~]# apachectl -M |grep status
status_module (shared)
2,存在就忽略这一步,不存在去/etc/httpd/httpd.conf把这个模块注释掉去掉
LoadModule status_module modules/mod_status.so
3,添加如下字段
<Location /server-status>
SetHandler server-status
Require host localhost
</Location>
5 - 安装ApacheHttp
系统包安装
sudo apt install apache2 | sudo yum install httpd | sudo dnf install httpd
源码安装
# 这份文档应该已经过时了, 这是n年前整理的不保证有效性
源码编译安装httpd
> http://httpd.apache.org/download.cgi 下载httpd源码包
> http://apr.apache.org/ 下载apr and apr-uril
> http://www.pcre.org/ 下载pcre
> yum install gcc* -y
1.安装apr
```shell
[root@localhost apr-1.4.5]# ./configure --prefix=/usr/local/apr
[root@localhost apr-1.4.5]# make
[root@localhost apr-1.4.5]# make install
2.安装apr-util
[root@localhost apr-util-1.3.12]# ./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/
[root@localhost apr-util-1.3.12]# make
[root@localhost apr-util-1.3.12]# make install
3.安装pcre
[root@localhost pcre-8.31]# ./configure --prefix=/usr/local/pcre
[root@localhost pcre-8.31]# make
[root@localhost pcre-8.31]# make install
4.安装apache
groupadd apache
useradd -r -g apache apache -s /sbin/nologin
编译参数
./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd --enable-so --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-mpms-shared=all --with-mpm=event
--prefix=/usr/local/apache24 -- 安装位置
--with-apr=/usr/local/apr --依赖包
--with-apr-util=/usr/local/apr-util --依赖包
--with-pcre=/usr/local/pcre --依赖包
vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables restart
cd /usr/local/apache24
vim /etc/httpd/httpd.conf --配置配置文件
找到ServerName 打开
./bin/apachectl start
curl localhost
apache配置文件加上这句话,要不php编译完不能解析,需要重新编译安装
AddType application/x-httpd-php .php .phtml
6 - 禁止ip访问
NameVirtualHost 1.1.1.1
## 这里假设要禁止的ip为1.1.1.1
<VirtualHost 1.1.1.1>
ServerName 1.1.1.1
<Location />
Order Allow,Deny
Deny from all
</Location>
</VirtualHost>
2.4 Require all denied
## 实现拒绝直接通过1.1.1.1这个IP的任何访问请求,这时如果你用1.1.1.1访问,会提示拒绝访问
<VirtualHost 1.1.1.1>
DocumentRoot "/var/www/cainiaoer"
ServerName www.cainiaoer.com
</VirtualHost>
## 允许通过www.cainiaoer.com这个域名访问,主目录指向/var/www/cainiaoer(这里假设网站的根目录是/var/www/cainiaoer)
7 - 设置不允许访问文件
在配置文件"/usr/local/apache2/conf/httpd.conf" 中添加内容:
<Files "*.txt">
Require all denied
</Files>
8 - 自定义header
- 在设置自定义header前,需要先检测一下你的httpd是否加载了mod_headers
/usr/local/apache2/bin/apachectl -l
如果,显示有mode_headers.c 则是加载了这个模块,否则就需要重新编译一下了。
另外,如果你使用的是rpm安装的话,那肯定是已经加载了mod_headers这个模块的。
- 在httpd.conf 中加入
<IFModule mod_headers.c>
Header add MyHeader "Hello"
</IFModule>
保存后,重启apache就可以了
双引号中的内容为自定义内容。当然这里的"MyHeader"也是可以自定义的。
- 测试
curl -I http://localhost
看是否显示有 MyHeader “Hello”