标签 Apache 下的文章

在这篇文章中,我们将会学习关于Docker的一些知识,如何使用Docker部署Apache httpd服务,并且共享到Docker Hub上面去。首先,我们学习怎样拉取和使用Docker Hub里面的镜像,然后在一个Fedora 22的镜像上交互式地安装Apache,之后我们将会学习如何用一个Dockerfile文件来以一种更快,更优雅的方式制作一个镜像。最后,我们将我们创建的镜像发布到Docker Hub上,这样以后任何人都可以下载并使用它。

安装并初体验Docker

要求

运行Docker,你至少需要满足这些:

  • 你需要一个64位的内核,版本3.10或者更高
  • Iptables 1.4 - Docker会用它来做网络配置,如网络地址转换(NAT)
  • Git 1.7 - Docker会使用Git来与仓库交流,如Docker Hub
  • ps - 在大多数环境中这个工具都存在,在procps包里有提供
  • root - 尽管一般用户可以通过TCP或者其他方式来运行Docker,但是为了简化,我们会假定你就是root

使用dnf安装docker

以下的命令会安装Docker

dnf update && dnf install docker

注意:在Fedora 22里,你仍然可以使用Yum命令,但是它被DNF取代了,而且在纯净安装时不可用了。

检查安装

我们将要使用的第一个命令是docker info,这会输出很多信息给你:

docker info

也可以试着用docker version

docker version

以守护进程方式启动Dcoker

你应该启动一个docker实例,然后她会处理我们的请求。

docker -d

现在我们设置 docker 随系统启动,以便我们不需要每次重启都需要运行上述命令。

chkconfig docker on

让我们用Busybox来打印hello world:

dockr run -t busybox /bin/echo "hello world"

这个命令里,我们告诉Docker在Busybox镜像的一个实例/容器里执行 /bin/echo "hello world"。Busybox是一个小型的POSIX环境,将许多小工具都结合到了一个单独的可执行程序里。

如果Docker不能在你的系统里找到本地的Busybox镜像,她就会自动从Docker Hub里拉取镜像,正如你可以看下如下的快照:

Hello world with Busybox

Hello world with Busybox

再次尝试相同的命令,这次由于Docker已经有了本地的Busybox镜像,你将会看到的全部就是echo的输出:

docker run -t busybox /bin/echo "hello world"

也可以尝试以下的命令进入到容器环境里去:

docker run -it busybox /bin/sh

使用exit命令可以离开容器并停止它

交互式地Docker化Apache

拉取/下载 Fedora 镜像:

docker pull fedora:22

启动一个容器在后台运行:

docker run -d -t fedora:22 /bin/bash

列出正在运行地容器及其名字标识,如下

docker ps

listing with docker ps and attaching with docker attach

使用docker ps列出,并使用docker attach进入一个容器里

angry\_noble是docker分配给我们容器的名字,所以我们来连接上去:

docker attach angry_noble

注意:每次你启动一个容器,就会被给与一个新的名字,如果你的容器需要一个固定的名字,你应该在 docker run 命令里使用 -name 参数。

安装Apache

下面的命令会更新DNF的数据库,下载安装Apache(httpd包)并清理dnf缓存使镜像尽量小

dnf -y update && dnf -y install httpd && dnf -y clean all

配置Apache

我们需要修改httpd.conf的唯一地方就是ServerName,这会使Apache停止抱怨

sed -i.orig 's/#ServerName/ServerName/' /etc/httpd/conf/httpd.conf

设定环境

为了使Apache运行为独立模式,你必须以环境变量的格式提供一些信息,并且你也需要创建这些变量里的目录,所以我们将会用一个小的shell脚本干这个工作,当然也会启动Apache

vi /etc/httpd/run_apache_foreground

#!/bin/bash

#设置环境变量
APACHE_LOG_DI=R"/var/log/httpd"
APACHE_LOCK_DIR="/var/lock/httpd"
APACHE_RUN_USER="apache"
APACHE_RUN_GROUP="apache"
APACHE_PID_FILE="/var/run/httpd/httpd.pid"
APACHE_RUN_DIR="/var/run/httpd"

#如果需要的话,创建目录
if ! [ -d /var/run/httpd ]; then mkdir /var/run/httpd;fi
if ! [ -d /var/log/httpd ]; then mkdir /var/log/httpd;fi
if ! [ -d /var/lock/httpd ]; then mkdir /var/lock/httpd;fi

#运行 Apache
httpd -D FOREGROUND

另外地,你可以粘贴这个片段代码到容器shell里并运行:

dnf -y install git && git clone https://github.com/gaiada/run-apache-foreground.git && cd run-apach* && ./install && dnf erase git

上面的内嵌脚本会安装Git,克隆这个仓库,到文件里去运行脚本,并询问你是否卸载Git。

保存你的容器状态

你的容器现在准备好运行Apache,是时候保存容器当前的状态为一个镜像,以备你需要的时候使用。

为了离开容器环境,你必须顺序按下 Ctrl+qCtrl+p,如果你仅仅在shell执行exit,你同时也会停止容器,失去目前为止你做过的所有工作。

回到Docker主机,使用 docker commit 及容器名和你想要的仓库名字/标签:

docker commit angry_noble gaiada/apache

现在,你保存了容器的状态到一个镜像里,可以使用 docker stop 停止容器了:

docker stop angry_noble

运行并测试你的镜像

最后,从你的新镜像启动一个容器,并且重定向80端口到该容器:

docker run -p 80:80 -d -t gaiada/apache /etc/httpd/run_apache_foreground

到目前,你正在你的容器里运行Apache,打开你的浏览器访问该服务,在http://localhost,你将会看到如下Apache默认的页面

Apache default page running from Docker container

在容器里运行的Apache默认页面

使用Dockerfile Docker化Apache

现在,我们将要去创建一个新的Apache镜像,这次所有步骤会写在一个Dockerfile文件里,文件将会被用于生成该镜像。

首先,新建一个目录,在里面放Dockerfile文件,并进入该目录:

mkdir apachedf; cd apachedf

然后创建一个名为Dockerfile的文件,添加以下内容:

FROM fedora:22

MAINTAINER Carlos Alberto
LABEL version="0.1"

RUN dnf -y update && dnf -y install httpd && dnf -y clean all

RUN [ -d /var/log/httpd ] || mkdir /var/log/httpd
RUN [ -d /var/run/httpd ] || mkdir /var/run/httpd
RUN [ -d /var/lock/httpd ] || mkdir /var/lock/httpd

RUN sed -i.orig 's/#ServerName/ServerName/' /etc/httpd/conf/httpd.conf

ENV APACHE_RUN_USER apache
ENV APACHE_RUN_GROUP apache
ENV APACHE_LOG_DIR /var/log/httpd
ENV APACHE_LOCK_DIR /var/lock/httpd
ENV APACHE_RUN_DIR /var/run/httpd
ENV APACHE_PID_FILE /var/run/httpd/httpd.pid

EXPOSE 80

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

我们一起来看看Dockerfile里面有什么:

  • FROM - 这告诉docker,我们将要使用Fedora 22作为基础镜像
  • MAINTAINERLABLE - 这些命令对镜像没有直接作用,属于标记信息
  • RUN - 自动完成我们之前交互式做的工作,安装Apache,新建目录并编辑httpd.conf
  • ENV - 设置环境变量,现在我们再不需要runapacheforeground脚本
  • EXPOSE - 暴露80端口给外网
  • CMD - 设置默认的命令启动httpd服务,这样我们就不需要每次起一个新的容器都重复这个工作

建立该镜像

现在,我们将要建立这个镜像,并为其添加tag gaiada/apachedf

docker build -t gaiada/apachedf:0.1 .

docker build complete

docker完成创建

使用 docker images 列出本地镜像,查看是否存在你新建的镜像:

docker images

然后运行新的镜像:

docker run -t -p 80:80 gaiada/apachedf

这就是Dockerfile的工作,使用这项功能会使得事情更加容易,快速并且可重复生成。

发布你的镜像

直到现在,你仅仅是从Docker Hub拉取了镜像,但是你也可以推送你的镜像,以后需要也可以再次拉取他们。实际上,其他人也可以下载你的镜像,在他们的系统中使用它而不需要改变任何东西。现在我们将要学习如何使我们的镜像对世界上的其他人可用。

创建帐号

为了能够在Docker Hub上推送你的镜像,你需要创建一个帐号。访问 https://hub.docker.com/account/signup/,填写下面的表格:

Docker Hub signup page

Docker Hub 注册页面

登录

输入下面的命令,接着输入你注册时提供的用户名,密码和邮箱

docker login

第一次登录过后,你的帐号信息会被记录在 ~/.dockercfg

推送

推送镜像,使用 docker push [registry/]yourlogin/repositoryname[:tag]

docker push docker.io/gaiada/apachedf

你可能会看见像这样的输出,在你的控制台上:

Docker push Apache image complete

Docker推送Apache镜像完成

结论

现在,你知道如何Docker化Apache,试一试包含其他一些组件,Perl,PHP,proxy,HTTPS,或者任何你需要的东西。我希望你们这些家伙喜欢她,并推送你们自己的镜像到Docker Hub。


via: http://linoxide.com/linux-how-to/configure-apache-containers-docker-fedora-22/

作者:Carlos Alberto 译者:wi-cuckoo 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

网站是我们生活中重要的一部分。它们是实现扩大业务、分享知识以及其它更多功能的方式。早期受制于只能提供静态内容,随着动态客户端和服务器端脚本语言的引入和现有静态语言的持续改进,例如从 html 到 html5,动态网站成为可能,剩下的也许在不久的将来也会实现。

对于网站,随之而来的是需要一个能向全球大规模用户显示站点的某个东西。这个需求可以通过托管网站的服务器实现。这包括一系列的服务器,例如:Apache HTTP Server、Joomla 以及 允许个人拥有自己网站的 WordPress。

Apache htaccess 小技巧

25 个 htaccess 小技巧

想要拥有一个网站,可以创建一个自己的本地服务器,或者联系任何上面提到的或其它服务器管理员来托管他的网站。但实际问题也从这点开始。网站的性能主要取决于以下因素:

  • 网站消耗的带宽。
  • 面对黑客,网站有多安全。
  • 对数据库进行数据检索时的优化。
  • 显示导航菜单和提供更多 UI 功能时的用户友好性。

除此之外,保证托管网站服务器成功的多种因素还包括:

  • 对于一个流行站点的数据压缩量。
  • 同时为多个对请求同一或不同站点的用户服务的能力。
  • 保证网站上输入的机密数据安全,例如:Email、信用卡信息等等。
  • 允许更多的选项用于增强站点的动态性。

这篇文章讨论一个服务器提供的用于增强网站性能和提高针对坏机器人、热链等的安全性的功能:‘.htaccess’ 文件。

.htaccess 是什么?

htaccess (hypertext access,超文本访问) 是为网站所有者提供用于控制服务器环境变量以及其它参数的选项,从而增强他们网站的功能的文件。这些文件可以在网站目录树的任何一个目录中,并向该目录以及目录中的文件和子目录提供功能。

这些功能是什么呢?其实这些是服务器的指令,例如命令服务器执行特定任务的行,这些命令只对该文件所在目录中的文件和子目录有效。这些文件默认是隐藏的,因为所有操作系统和网站服务器默认配置为忽略它们,但如果查看隐藏文件的话,你就可以看到这些特殊文件。后续章节的话题将讨论能控制什么类型的参数。

注意:如果 .htaccess 文件保存在 /apache/home/www/Gunjit/ 目录,那么它会向该目录中的所有文件和子目录提供命令,但如果该目录包含一个名为 /Gunjit/images/ 子目录,且该子目录中也有一个 .htaccess 文件,那么这个子目录中的命令会覆盖父目录中 .htaccess 文件(或者目录层次结构中更上层的文件)提供的命令。

Apache Server 和 .htaccess 文件

Apache HTTP Server 俗称为 Apache,是为了表示对一个有卓越战争策略技能的美洲土著部落的尊敬而命名。它基于 NCSA HTTPd 服务器 ,是用 C/C++ 和 XML 建立的跨平台 Web 服务器,它在万维网的成长和发展中起到了关键作用。

它最常用于 UNIX,但 Apache 也能用于多种平台,包括 FreeBSD、Linux、Windows、Mac OS、Novel Netware 等。在 2009 年,Apache 成为第一个为超过一亿站点提供服务的服务器。

Apache 服务器可以让 www/ 目录中的每个用户有一个单独的 .htaccess 文件。尽管这些文件是隐藏的,但如果需要的话可以使它们可见。在 www/ 目录中可以有很多子目录,每个子目录通过用户名或所有者名称命名,包含了一个站点。除此之外你可以在每个子目录中有一个 .htaccess 文件,像之前所述用于配置子目录中的文件。

下面介绍如果配置 Apache 服务器上的 htaccess 文件。

Apache 服务器上的配置

这里有两种情况:

在自己的服务器上托管网站

在这种情况下,如果没有启用 .htaccess 文件,你可以通过在 http.conf(Apache HTTP 守护进程的默认配置文件) 中找到 部分启用。

<Directory "/var/www/htdocs">

定位如下行

AllowOverride None 

更改为

AllowOverride All

现在,重启 Apache 后就启用了 .htaccess。

在不同的托管服务提供商的服务器上托管网站

在这种情况下最好咨询托管管理员,如果他们允许访问 .htaccess 文件的话。

用于网站的 25 个 Apache Web 服务器 ‘.htaccess’ 小技巧

1. 如何在 .htaccess 文件中启用 mod\_rewrite

mod\_rewrite 选项允许你使用重定向并通过重定向到其它 URL 来隐藏你真实的 URL。这个选项非常有用,允许你用短的容易记忆的 URL 替换长 URL。

要允许 mod\_rewrite,只需要在你的 .htaccess 文件的第一行添加如下一行。

Options +FollowSymLinks

该选项允许你跟踪符号链接从而在站点中启用 modrewrite。后面会介绍用短 URL 替换。(LCTT 译注:+FollowSymLinks 只是启用 modrewrite 的前提之一,还需要在全局和虚拟机中设置 RewriteEngine on 才能启用重写模块。)

2. 如何允许或禁止对站点的访问

通过使用 order、allow 和 deny 关键字,htaccess 文件可以允许或者禁止对站点或目录中子目录或文件的访问。

只允许 IP 192.168.3.1 的访问

Order Allow, Deny
Deny from All
Allow from 192.168.3.1

或

Order Allow, Deny
Allow from 192.168.3.1

这里的 Order 关键字指定处理 allow 和 deny 访问的顺序。对于上面的 ‘Order’ 语句,首先会处理 Allow 语句,然后是 deny 语句。

只禁止某个 IP 的访问

下面一行的意思是除了 IP 地址 192.168.3.1,允许所有用户访问网站。

Order Allow, Deny
Deny from 192.168.3.1
Allow from All

或

Order Deny, Allow
Deny from 192.168.3.1

3. 为不同错误码生成 Apache 错误文档

用简单几行,我们可以解决当用户/客户端请求一个站点上不可用的网页时服务器产生的错误码的错误文档,例如我们大部分人见过的浏览器中显示的 ‘404 Page not found’。‘.htaccess’ 文件指定了发生这些错误情况时采取何种操作。

要做到这点,需要添加下面的行到 ‘.htaccess’ 文件:

ErrorDocument <error-code> <path-of-document/string-representing-html-file-content>

‘ErrorDocument’ 是一个关键字,error-code 可以是 401、403、404、500 或任何有效的表示错误的代码,最后 ‘path-of-document’ 表示本地机器上的路径(如果你使用的是你自己的本地服务器) 或服务器上的路径(如果你使用任何其它服务器来托管网站)。

例子:

ErrorDocument 404 /error-docs/error-404.html

上面一行设置客户请求任何无效页面,服务器报告 404 错误时显示 error-docs 目录下的 ‘error-404.html’ 文档。

<html><head><title>404 Page not found</title></head><body><p>The page you request is not present. Check the URL you have typed</p></body></html> 

上面的表示也正确,其中字符串相当于一个普通的 html 文件。

4. 设置/取消 Apache 服务器环境变量

在 .htaccess 文件中你可以设置或者取消站点所有者可以更改的全局环境变量。要设置或取消环境变量,你需要在你的 .htaccess 文件中添加下面的行。

设置环境变量

SetEnv OWNER “Gunjit Khera”

取消环境变量

UnsetEnv OWNER

5. 为文件定义不同 MIME 类型

MIME(多用途 Internet 多媒体扩展)是浏览器运行任何页面所默认识别的类型。你可以在 .htaccess 文件中为你的站点定义 MIME 类型,然后服务器就可以识别你定义类型的文件并运行。

<IfModule mod_mime.c>
    AddType application/javascript      js
    AddType application/x-font-ttf      ttf ttc
</IfModule>

这里,mod\_mime.c 是用于控制定义不同 MIME 类型的模块,如果在你的系统中已经安装了这个模块,那么你就可以用该模块去为你站点中不同的扩展名定义不同的 MIME 类型,从而让服务器可以理解这些文件。

6. 如何在 Apache 中限制上传和下载的大小

.htaccess 文件允许你能够控制某个用户从你的站点(通过 PHP)单次上传数据量的大小(LCTT 译注:原文有误,修改)。要做到这点你只需要添加下面的行到你的 .htaccess 文件:

php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200

上面的行设置最大上传大小、最大POST 提交数据大小、最长执行时间(例如,允许用户在他的本地机器上单次执行一个请求的最大时间)、限制的最大输入时间。

7. 让用户不能在你的站点上在线播放 .mp3 和其它文件

大部分情况下,人们在下载检查音乐质量之前会在网站上播放等等。作为一个聪明的销售者,你可以添加一个简单的功能,不允许任何用户在线播放音乐或视频,而是必须下载完成后才能播放。这非常有用,因为(无缓冲的)在线播放音乐和视频会消耗很多带宽。

要添加下面的行到你的 .htaccess 文件:

AddType application/octet-stream .mp3 .zip 

8. 为站点设置目录索引

大部分网站开发者都知道第一个显示的页面是哪个,例如一个站点的首页,被命名为 ‘index.html’。我们大部分也见过这个。但是如何设置呢?

.htaccess 文件提供了一种方式用于列出一个客户端请求访问网站的主页面时会顺序扫描的一些网页集合,相应地如果找到了列出的页面中的任何一个就会作为站点的主页面并显示给用户。

需要添加下面的行产生所需的效果。

DirectoryIndex index.html index.php yourpage.php

上面一行指定如果有任何访问首页的请求到来,首先会在目录中顺序搜索上面列出的网页:如果发现了 index.html 则显示为主页面,否则会找下一个页面,例如 index.php,如此直到你在列表中输入的最后一个页面。

9. 如何为文件启用 GZip 压缩以节省网站带宽

繁忙的站点通常比只占少量空间的轻量级站点运行更慢,这是常见的现象。因为对于繁忙的站点需要时间加载巨大的脚本文件和图片以在客户端的 Web 浏览器上显示。

通常的机制是这样的,当浏览器请求一个 web 页面时,服务器提供给浏览器该页面,并在浏览器端显示该 web 页面,浏览器需要下载该页面并运行页面内的脚本。

这里 GZip 压缩所做的就是节省单个用户的服务时间而不用增加带宽。服务器上站点的源文件以压缩形式保存,当用户请求到来的时候,这些文件以压缩形式传送,然后在客户端上解压(LCTT 译注:原文此处有误)。这改善了带宽限制。

下面的行允许你压缩站点的源文件,但要求在你的服务器上安装 mod\_deflate.c 模块。

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/html
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

10. 处理文件类型

服务器默认的有一些特定情况。例如:在服务器上运行 .php 文件,显示 .txt 文件。像这些我们可以以源代码形式只显示一些可执行 cgi 脚本或文件而不是执行它们(LCTT 译注:这是为了避免攻击者通过上传恶意脚本,进而在服务器上执行恶意脚本进行破坏和窃取)。

要做到这点在 .htaccess 文件中有如下行。

RemoveHandler cgi-script .php .pl .py
AddType text/plain .php .pl .py

这些行告诉服务器只显示而不执行 .pl (perl 脚本)、.php (PHP 文件) 和 .py (Python 文件) 。

11. 为 Apache 服务器设置时区

从 .htaccess 文件可用于为服务器设置时区可以看出它的能力和重要性。这可以通过设置一个服务器为每个托管站点提供的一系列全局环境变量中的 ‘TZ’ 完成。

由于这个原因,我们可以在网站上看到根据我们的时区显示的时间。也许服务器上其他拥有网站的人会根据他居住地点的位置设置时区。

下面的一行为服务器设置时区。

SetEnv TZ India/Kolkata

12. 如果在站点上启用缓存控制

浏览器很有趣的一个功能是,很多时间你可以看到,当多次同时打开一个网站和第一次打开相比前者会更快。但为什么会这样呢?事实上,浏览器在它的缓存中保存了一些通常访问的页面用于加快后面的访问。

但保存多长时间呢?这取决于你自己。例如,你的 .htaccess 文件中设置的缓存控制时间。.htaccess 文件指定了站点的网页可以在浏览器缓存中保存的时间,时间到期后需要重新验证缓存,页面可能会从缓存中删除然后在下次用户访问站点的时候重建。

下面的行为你的站点实现缓存控制。

<FilesMatch "\.(ico|png|jpeg|svg|ttf)$">
    Header Set Cache-Control "max-age=3600, public"
</FilesMatch>
<FilesMatch "\.(js|css)$">
    Header Set Cache-Control "public"
    Header Set Expires "Sat, 24 Jan 2015 16:00:00 GMT"
</FilesMatch>

上面的行允许缓存 .htaccess 文件所在目录中的页面一小时。

13. 配置单个文件

通常 .htaccess 文件中的内容会对该文件所在目录中的所有文件和子目录起作用,但是你也可以对特殊文件设置一些特殊权限,例如只禁止对某个文件的访问等等。

要做到这点,你需要在文件中以类似方式添加 标记:

<files conf.html="">
Order allow, deny
Deny from 188.100.100.0
</files>

这是一个禁止 IP 188.100.100.0 访问 ‘conf.html’ 的简单例子,但是你也可以添加介绍过的 .htaccess 文件的任何功能,包括将要介绍的功能,例如:缓存控制、GZip 压缩。

大部分服务器会用这个功能增强 .htaccess 文件的安全,这也是我们在浏览器上看不到 .htaccess 文件的原因。在后面的章节中会介绍如何给文件授权。

14. 启用在 cgi-bin 目录以外运行 CGI 脚本

通常服务器运行的 CGI 脚本都保存在 cgi-bin 目录中,但是你可以在你需要的目录运行 CGI 脚本,只需要在所需的目录中的 .htaccess 文件添加下面的行,如果没有该文件就创建一个,并添加下面的行:

AddHandler cgi-script .cgi
Options +ExecCGI

15.如何用 .htaccess 在站点上启用 SSI

服务器端包括(SSI)顾名思义是和服务器部分相关的东西。这是什么呢?通常当我们在站点上有很多页面的时候,我们在主页上会有一个显示到其它页面链接的导航菜单,我们可以启用 SSI 选项允许导航菜单中显示的所有页面完全包含在主页面中。

SSI 允许多个页面包含同样的内容,因此只需要编辑一个文件就行,从而可以节省很多磁盘空间。对于 .shtml 文件,服务器默认启用了该选项。

如果你想要对 .html 启用该选项,你需要添加下面的行:

AddHandler server-parsed .html

这样 html 文件中如下部分会被替换为 SSI。

<!--#inlcude virtual="gk/document.html"-->

16. 如何防止网站列出目录列表

为防止任何客户端在本地机器罗列服务器上的网站目录列表,添加下面的行到你不想列出的目录的文件中。

Options -Indexes

17. 更改默认字符集和语言头

.htaccess 文件允许你更改网站使用的字符集,例如 ASCII 或 UNICODE,UTF-8 等,以及用于显示内容的默认语言。

在服务器的全局环境变量之后添加下面语句可以实现上述功能。

AddDefaultCharset UTF-8
DefaultLanguage en-US

18. 重定向一个非 www URL 到 www URL

在开始解释之前,首先看看如何启用该功能,添加下列行到 .htaccess 文件。

RewriteEngine ON
RewriteCond %{HTTP_HOST} ^abc\.net$
RewriteRule (.*) http://www.abc.net/$1 [R=301,L]

上面的行启用重写引擎,然后在第二行检查所有涉及到主机 abc.net 或 环境变量 HTTP\_HOST 为 “abc.net” 的 URL。

对于所有这样的 URL,代码永久重定向它们(如果启用了 R=301 规则)到新 URL http://www.abc.net/$1,其中 $1 是主机为 abc.net 的非 www URL。非 www URL 是大括号内的内容,并通过 $1 引用。

重写 URL 的重定向规则

重写功能简单的说,就是用短而易记的 URL 替换长而难以记忆的 URL。但是,在开始这个话题之前,这里有一些本文后面会使用的特殊字符的规则和约定。

特殊符号:

符号              含义
^         -     字符串开头
$         -     字符串结尾
|         -     或 [a|b] : a 或 b
[a-z]     -     a 到 z 的任意字母
+         -     之前字母的一次或多次出现
*         -     之前字母的零次或多次出现
?         -     之前字母的零次或一次出现

常量和它们的含义:

常量          含义
NC          -   区分大小写
L           -   最后的规则 – 停止处理后面规则
R           -   临时重定向到新 URL
R=301       -   永久重定向到新 URL
F           -   禁止发送 403 头给用户
P           -   代理 - 获取远程内容代替部分并返回
G           -   Gone, 不再存在
S=x         -   跳过后面的 x 条规则
T=mime-type -   强制指定 MIME 类型
E=var:value -   设置环境变量 var 的值为 value
H=handler   -   设置处理器
PT          -   Pass through - 用于 URL 还有额外的头
QSA         -   将查询字符串追加到替换 URL 

19. 重定向整个站点到 https

下面的行会帮助你转换整个网站到 https:

RewriteEngine ON
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

上面的行启用重写引擎,然后检查环境变量 HTTPS 的值。如果设置了那么重写所有网站页面到 https。

20.一个自定义重写例子

例如,重定向 url ‘http://www.abc.net?p=100&q=20’ 到 ‘http://www.abc.net/10020pq’。

RewriteEngine ON
RewriteRule ^http://www.abc.net/([0-9]+)([0-9]+)pq$ ^http://www.abc.net?p=$1&q=$2

在上面的行中,$1 表示第一个括号,$2 表示第二个括号。

21. 重命名 htaccess 文件

为了防止入侵者和其他人查看 .htaccess 文件,你可以重命名该文件,这样就不能通过客户端浏览器访问。实现该目标的语句是:

AccessFileName  htac.cess

22. 如何为你的网站禁用图片盗链

网站带宽消耗比较大的另外一个重要问题是盗链问题,这是其它站点用于显示你网站的图片而链接到你的网站的链接,这会消耗你的带宽。这问题也被成为 ‘带宽盗窃’。

一个常见现象是当一个网站要显示其它网站所包含的图片时,由于该链接需要从你的网站加载内容,消耗你站点的带宽而为其它站点显示图片。为了防止出现这种情况,比如对于 .gif、.jpeg 图片等,下面的代码行会有所帮助:

RewriteEngine ON
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpeg|png)$ - [F].

上面的行检查 HTTP\_REFERER 是否没有设为空或没有设为你站点上的任何链接。如果是这样的话,你网页上的所有图片会用 403 禁止访问代替。

23. 如何将用户重定向到维护页面

如果你的网站需要进行维护并且你想向所有需要访问该网站的你的所有客户通知这个消息,对于这种情况,你可以添加下面的行到你的 .htaccess 文件,从而只允许管理员访问并替换所有访问 .jpg、.css、.gif、.js 等的页面内容。

RewriteCond %{REQUEST_URI} !^/admin/ [NC]
RewriteCond %{REQUEST_URI} !^((.*).css|(.*).js|(.*).png|(.*).jpg)    [NC]
RewriteRule ^(.*)$ /ErrorDocs/Maintainence_Page.html [NC,L,U,QSA]

这些行检查请求 URL 是否包含任何例如以 ‘/admin/’ 开头的管理页面的请求,或任何到 ‘.png, .jpg, .js, .css’ 页面的请求,对于任何这样的请求,用 ‘ErrorDocs/Maintainence\_Page.html’ 替换那个页面。

24. 映射 IP 地址到域名

名称服务器是将特定 IP 地址转换为域名的服务器。这种映射也可以在 .htaccess 文件中用以下形式指定。

# 为了将IP地址 L.M.N.O 映射到域名 www.hellovisit.com
RewriteCond %{HTTP_HOST} ^L\.M\.N\.O$ [NC]
RewriteRule ^(.*)$ http://www.hellovisit.com/$1 [L,R=301]

上面的行检查任何页面的主机是否包含类似 L.M.N.O 的 IP 地址,如果是的话第三行会通过永久重定向将页面映射到域名 http://www.hellovisit.com

25. FilesMatch 标签

类似用于应用条件到单个文件的 标签, 能用于匹配一组文件并对该组文件应用一些条件,如下:

<FilesMatch “\.(png|jpg)$”>
Order Allow, Deny 
Deny from All
</FilesMatch>

结论

.htaccess 文件能实现的小技巧还有很多。这告诉了我们这个文件有多么强大,通过该文件能给你的站点添加多少安全性、动态性以及其它功能。

我们已经在这篇文章中尽最大努力覆盖尽可能多的 htaccess 小技巧,但如果我们缺少了任何重要的技巧,或者你愿意告诉我们你的 htaccess 想法和技巧,你可以在下面的评论框中提交,我们也会在文章中进行介绍。


via: http://www.tecmint.com/apache-htaccess-tricks/

作者:Gunjit Khera 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题: 我尝试着解决我 Linux 系统上的 Apache Web 服务器的错误,Apache的错误日志文件放在[XX Linux 版本]的哪个位置呢?

错误日志和访问日志文件为系统管理员提供了有用的信息,比如,为 Web 服务器排障,保护系统不受各种各样的恶意活动侵犯,或者只是进行各种各样的分析以监控 HTTP 服务器。根据你 Web 服务器配置的不同,其错误/访问日志可能放在你系统中不同位置。

本文可以帮助你找到Linux上的Apache错误日志

Debian,Ubuntu或Linux Mint上的Apache错误日志位置

默认的错误日志

在基于Debian的Linux上,系统范围的Apache错误日志默认位置是/var/log/apache2/error.log。默认位置可以通过编辑Apache的配置文件进行修改。

自定义的错误日志

要找到自定义的错误日志位置,请用文本编辑器打开 /etc/apache2/apache2.conf,然后查找以 ErrorLog 开头的行,该行指定了自定义的 Apache 错误日志文件的位置。例如,在未经修改的 Apache 配置文件中可以找到以下行:

ErrorLog ${APACHE_LOG_DIR}/error.log

在本例中,该位置使用 APACHELOGDIR 环境变量进行配置,该变量在 /etc/apache2/envvars 中已被定义。

export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

在实际情况中, ErrorLog 可能会指向你 Linux 系统中任意路径。

使用虚拟主机自定义的错误日志

如果在 Apache Web 服务器中使用了虚拟主机, ErrorLog 指令可能会在虚拟主机容器内指定,在这种情况下,上面所说的系统范围的错误日志位置将被忽略。

启用了虚拟主机后,各个虚拟主机可以定义其自身的自定义错误日志位置。要找出某个特定虚拟主机的错误日志位置,你可以打开 /etc/apache2/sites-enabled/.conf,然后查找 ErrorLog 指令,该指令会显示站点指定的错误日志文件。

CentOS,Fedora或RHEL上的Apache错误日志位置

默认的错误日志

在基于 Red Hat 的Linux中,系统范围的 Apache 错误日志文件默认被放置在/var/log/httpd/error\_log。该默认位置可以通过修改 Apache 配置文件进行自定义。

自定义的错误日志

要找出 Apache 错误日志的自定义位置,请用文本编辑器打开 /etc/httpd/conf/httpd.conf,然后查找 ServerRoot,该参数显示了 Apache Web 服务器目录树的顶层,日志文件和配置都位于该目录树中。例如:

ServerRoot "/etc/httpd"

现在,查找 ErrorLog 开头的行,该行指出了 Apache Web 服务器将错误日志写到了哪里去。注意,指定的位置是 ServerRoot 值的相对位置。例如:

ErrorLog "log/error_log"

结合上面的两个指令,可以获得完整的错误日志路径,默认情况下该路径就是 /etc/httpd/logs/errorlog。在全新安装的Apache中,这是一个到 /var/log/httpd/errorlog 的符号链接。

在实际情况中, ErrorLog 可能指向你 Linux 系统中的任意位置。

使用虚拟主机自定义的错误日志

如果你启用了虚拟主机,你可以通过检查 /etc/httpd/conf/httpd.conf(或其它任何定义了虚拟主机的文件)来找到各个虚拟主机的错误日志位置。在独立的虚拟主机部分查找 ErrorLog。如,在下面的虚拟主机部分,错误日志的位置是 /var/www/xmodulo.com/logs/error\_log。

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/xmodulo.com/public_html
    ServerName www.xmodulo.com
    ServerAlias xmodulo.com
    ErrorLog /var/www/xmodulo.com/logs/error_log
    CustomLog /var/www/xmodulo.com/logs/access_log
<VirtualHost>

via: http://ask.xmodulo.com/apache-error-log-location-linux.html

作者:Dan Nanni 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

对于那些需要在因特网上提供服务或托管主机的人来说,保证您的系统在面对攻击时的安全是一个重要的事情。

mod\_security(一个开源的用于Web应用入侵检测及防护的引擎,可以无缝地集成到Web服务器)和mod\_evasive是两个在服务器端对抗暴力破解和(D)DoS攻击的非常重要的工具。

mod\_evasive,如它的名字一样,在受攻击时提供避实就虚的功能,它像一个雨伞一样保护Web服务器免受那些威胁。

安装mod\_security和mod\_evasive来保护Apache

在这篇文章中我们将讨论如何安装、配置以及在RHEL/CentOS6、7和Fedora 21-15上将它们整合到Apache。另外,我们会模拟攻击以便验证服务器做出了正确的反应。

以上以您的系统中安装有LAMP服务器为基础,所以,如果您没有安装,请先阅读下面链接的文章再开始阅读本文。

(LCTT 译注:本文有修改。原文为了在RHEL/CentOS 7或Fedora 21中使用同样的工具,而删除了它们自带的 firewalld,使用了旧式的iptables。译者以为这样并不恰当,因此,译文中做了相应删节,并增加了firewalld的相应脚本。)

步骤 1: 安装mod\_security和mod\_evasive

另外,在安装LAMP后,您还需要在RHEL/CentOS 7/6中开启EPEL仓库来安装这两个包。Fedora用户不需要开启这个仓库,因为epel已经是Fedora项目的一部分了。

# yum update && yum install mod_security mod_evasive

当安装结束后,您会在/etc/httpd/conf.d下找到这两个工具的配置文件。

# ls -l /etc/httpd/conf.d

mod\_security + mod\_evasive 配置文件

现在,为了整合这两个模块到Apache,并在启动时加载它们。请确保下面几行出现在mod\_evasive.conf和mod\_security.conf的顶层部分,它们分别为:

LoadModule evasive20_module modules/mod_evasive24.so
LoadModule security2_module modules/mod_security2.so

请注意modules/mod\_security2.so和modules/mod\_evasive24.so都是从/etc/httpd到模块源文件的相对路径。您可以通过列出/etc/httpd/modules的内容来验证(如果需要的话,修改它):

# cd /etc/httpd/modules
# pwd
# ls -l | grep -Ei '(evasive|security)'

验证mod\_security + mod\_evasive模块

接下来重启Apache并且核实它已加载了mod\_evasive和mod\_security:

# service httpd restart         [在RHEL/CentOS 6和Fedora 20-18上]
# systemctl restart httpd       [在RHEL/CentOS 7和Fedora 21上]

# httpd -M | grep -Ei '(evasive|security)'     [输出已加载的静态模块和动态模块列表]

检查mod\_security + mod\_evasive模块已加载

步骤 2: 安装一个核心规则集并且配置mod\_security

简单来说,一个核心规则集(即CRS)为web服务器提供特定状况下如何反应的指令。mod\_security的开发者们提供了一个免费的CRS,叫做OWASP([开放Web应用安全项目])ModSecurity CRS,可以从下面的地址下载和安装。

下载OWASP CRS到为之创建的目录

# mkdir /etc/httpd/crs-tecmint
# cd /etc/httpd/crs-tecmint
# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master

下载mod\_security核心规则

解压CRS文件并修改文件夹名称

# tar xzf master
# mv SpiderLabs-owasp-modsecurity-crs-ebe8790 owasp-modsecurity-crs

解压mod\_security核心规则

现在,是时候配置mod\_security了

将示例的规则文件(owasp-modsecurity-crs/modsecuritycrs10\_setup.conf.example)拷贝为同名的配置文件。

# cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf

并通过将下面的几行插入到web服务器的主配置文件/etc/httpd/conf/httpd.conf来告诉Apache将这个文件和该模块放在一起使用。如果您选择解压打包文件到另一个文件夹,那么您需要修改Include的路径:

<IfModule security2_module>
    Include crs-tecmint/owasp-modsecurity-crs/modsecurity_crs_10_setup.conf
    Include crs-tecmint/owasp-modsecurity-crs/base_rules/*.conf
</IfModule>

最后,建议您在/etc/httpd/modsecurity.d目录下创建自己的配置文件,在那里我们可以用我们自定义的文件夹(接下来的示例中,我们会将其命名为tecmint.conf)而无需修改CRS文件的目录。这样做能够在CRS发布新版本时更加容易的升级。

<IfModule mod_security2.c>
    SecRuleEngine On
    SecRequestBodyAccess On
    SecResponseBodyAccess On 
    SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream 
    SecDataDir /tmp
</IfModule>

您可以在SpiderLabs的ModSecurity GitHub仓库中参考关于mod\_security目录的更完整的解释。

步骤 3: 配置mod\_evasive

mod\_evasive被配置为使用/etc/httpd/conf.d/mod\_evasive.conf中的指令。与mod\_security不同,由于在包升级时没有规则来更新,因此我们不需要独立的文件来添加自定义指令。

默认的mod\_evasive.conf开启了下列的目录(注意这个文件被详细的注释了,因此我们剔掉了注释以重点显示配置指令):

<IfModule mod_evasive24.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
</IfModule>

这些指令的解释:

  • DOSHashTableSize: 这个指令指明了哈希表的大小,它用来追踪基于IP地址的活动。增加这个数字将使得站点访问历史的查询变得更快,但如果被设置的太大则会影响整体性能。
  • DOSPageCount: 在DOSPageInterval间隔内可由一个用户发起的针对特定的URI(例如,一个Apache 提供服务的文件)的同一个请求的数量。
  • DOSSiteCount: 类似DOSPageCount,但涉及到整个站点总共有多少的请求可以在DOSSiteInterval间隔内被发起。
  • DOSBlockingPeriod: 如果一个用户超过了DOSSPageCount的限制或者DOSSiteCount,他的源IP地址将会在DOSBlockingPeriod期间内被加入黑名单。在DOSBlockingPeriod期间,任何从这个IP地址发起的请求将会遭遇一个403禁止错误。

尽可能的试验这些值,以使您的web服务器有能力处理特定大小的负载。

一个小警告: 如果这些值设置的不合适,则您会蒙受阻挡合法用户的风险。

您也许还会用到以下其它有用的指令:

DOSEmailNotify

如果您运行有一个邮件服务器,您可以通过Apache发送警告消息。注意,如果SELinux已开启,您需要授权apache用户SELinux的权限来发送email。您可以通过下面的命令来授予权限:

# setsebool -P httpd_can_sendmail 1

接下来,将这个指令和其他指令一起加入到mod\_evasive.conf文件。

DOSEmailNotify [email protected]

如果这个指令设置了合适的值,并且您的邮件服务器在正常的运行,则当一个IP地址被加入黑名单时,会有一封邮件被发送到相应的地址。

DOSSystemCommand

它需要一个有效的系统命令作为参数,

DOSSystemCommand </command>

这个指令指定当一个IP地址被加入黑名单时执行的命令。它通常结合shell脚本来使用,比如在脚本中添加一条防火墙规则来阻挡某个IP进一步的连接。

写一个shell脚本在防火墙阶段处理IP黑名单

当一个IP地址被加入黑名单,我们需要阻挡它进一步的连接。我们需要下面的shell脚本来执行这个任务。在/usr/local/bin下创建一个叫做scripts-tecmint的文件夹(或其他的名字),以及一个叫做ban\_ip.sh的文件。

用于iptables防火墙

#!/bin/sh
# 由mod_evasive检测出,将被阻挡的IP地址
IP=$1
# iptables的完整路径
IPTABLES="/sbin/iptables"
# mod_evasive锁文件夹
mod_evasive_LOGDIR=/var/log/mod_evasive
# 添加下面的防火墙规则 (阻止所有从$IP流入的流量)
$IPTABLES -I INPUT -s $IP -j DROP
# 为了未来的检测,移除锁文件
rm -f "$mod_evasive_LOGDIR"/dos-"$IP"

用于firewalld防火墙

#!/bin/sh
# 由mod_evasive检测出,将被阻挡的IP地址
IP=$1
# firewalld-cmd的完整路径
FIREWALL_CMD="/usr/bin/firewall-cmd"
# mod_evasive锁文件夹
mod_evasive_LOGDIR=/var/log/mod_evasive
# 添加下面的防火墙规则 (阻止所有从$IP流入的流量)
$FIREWALL_CMD --zone=drop --add-source $IP
# 为了未来的检测,移除锁文件
rm -f "$mod_evasive_LOGDIR"/dos-"$IP"

我们的DOSSystemCommand指令应该是这样的:

DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"

上面一行的%s代表了由mod\_evasive检测到的攻击IP地址。

将apache用户添加到sudoers文件

请注意,如果您不给予apache用户以无需终端和密码的方式运行我们脚本(关键就是这个脚本)的权限,则这一切都不起作用。通常,您只需要以root权限键入visudo来存取/etc/sudoers文件,接下来添加下面的两行即可:

apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
Defaults:apache !requiretty

添加Apache用户到Sudoers

重要: 在默认的安全策略下您只能在终端中运行sudo。由于这个时候我们需要在没有tty的时候运行sudo,我们必须像下图中那样注释掉下面这一行:

#Defaults requiretty

为Sudo禁用tty

最后,重启web服务器:

# service httpd restart         [在RHEL/CentOS 6和Fedora 20-18上]
# systemctl restart httpd       [在RHEL/CentOS 7和Fedora 21上]

步骤4: 在Apache上模拟DDoS攻击

有许多工具可以在您的服务器上模拟外部的攻击。您可以google下“tools for simulating DDoS attacks”来找一找相关的工具。

注意,您(也只有您)将负责您模拟所造成的结果。请不要考虑向不在您自己网络中的服务器发起模拟攻击。

假如您想对一个由别人托管的VPS做这些事情,您需要向您的托管商发送适当的警告或就那样的流量通过他们的网络获得允许。Tecmint.com不会为您的行为负责!

另外,仅从一个主机发起一个DoS攻击的模拟无法代表真实的攻击。为了模拟真实的攻击,您需要使用许多客户端在同一时间将您的服务器作为目标。

我们的测试环境由一个CentOS 7服务器[IP 192.168.0.17]和一个Windows组成,在Windows[IP 192.168.0.103]上我们发起攻击:

确认主机IP地址

请播放下面的视频(YT 视频,请自备梯子: https://www.youtube.com/-U_mdet06Jk ),并跟从列出的步骤来模拟一个DoS攻击:

然后攻击者的IP将被防火墙阻挡:

阻挡攻击者的IP地址

结论

在开启mod\_security和mod\_evasive的情况下,模拟攻击会导致CPU和RAM用量在源IP地址被加入黑名单之前出现短暂几秒的使用峰值。如果没有这些模块,模拟攻击绝对会很快将服务器击溃,并使服务器在攻击期间无法提供服务。

我们很高兴听见您打算使用(或已经使用过)这些工具。我们期望得到您的反馈,所以,请在留言处留下您的评价和问题,谢谢!

参考链接


via: http://www.tecmint.com/protect-apache-using-mod_security-and-mod_evasive-on-rhel-centos-fedora/

作者:Gabriel Cánepa 译者:wwy-hust 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Apache是最流行的web服务器,它通常用来接收客户端的请求并响应。它得到一个URL并将它翻译成一个文件名(或者静态请求),并将文件从本地磁盘中取出,通过因特网返回;或者将它翻译成程序执行它,接着将输出返回给请求方。如果web服务器不能处理和完成请求,它会返回一个错误信息。

在本篇中,我们会列出Apache的特性以及我们该如何用mod\_jk连接器来集成Tomcat 7和Tomcat 8。

Apache的特性

如我们所说Apache是最流行的web服务器。下面是流行背后的原因:

  • 它是自由工具,你可以很简单地下载和安装
  • 它开放源码,因此你可以查看源码,调整它,优化它,并且修复错误和安全漏洞。也可以增加新的功能和模块。
  • 它可以用在只有一两个页面的小网站,或者是有成千上万个页面的大网站,每月处理上百万的常规访问者的请求。它可以同时处理静态和动态内容。
  • 改进的缓存模块(mod\_cache、 mod\_disk\_cache、 mod\_mem\_cache)。
  • Apache 2 支持 IPv6.

Tomcat 的目录

${tomcat\_home} 是tomcat的根目录。你的tomcat安装应该有下面的子目录:

  • ${tomcat\_home}\conf – 存放不同配置文件的地方
  • ${tomcat\_home}\webapps – 包含示例程序
  • ${tomcat\_home}\bin – 存放你的Web服务器的插件的地方

Mod\_jk 模块

mod\_jk有两种可接受的方式:二进制或者源码。取决于你运行的web服务器的平台,也许有符合你的平台的二进制版本的mod\_jk。如果有的话建议使用这个。

mod\_jk模块在这些平台上开发及测试过:

  • Linux、 FreeBSD、 AIX、 HP-UX、 MacOS X、 Solaris ,应该在主流的支持Apache 1.3 和/或者 2.x的Unix平台上都工作。
  • WinNT 4.0-i386 SP4/SP5/SP6a (应该可以与其他的服务包一起工作), Win2K 和 WinXP 和 Win98
  • Cygwin (需要你有apache服务器及autoconf/automake支持工具)
  • Netware
  • i5/OS V5R4 (System I) ,带有 Apache HTTP Server 2.0.58。 确保已经安装了最新的 Apache PTF
  • Tomcat 3.2 到 Tomcat 8

The mod\_jk 需要两个组件:

  • mod\_jk.xxx – Apache HTTP服务器模块,取决于你的操作系统,它可能是mod\_jk.so、mod\_jk.nlm或者mod\_jk.SRVPGM。
  • workers.properties - 描述Worker (Tomcat进程)所用的主机以及处理器使用的端口。在下载的源码的conf目录下找到示例的workers.properties文件。

和Apache HTTP服务器其他的模块一样,mod\_jk应该安装在你的Apache服务器下的模块目录下:/usr/lib/apache,而且你应该更新你的httpd.conf文件。

安装

在开始安装前,非root用户需要使用“sudo”特权。现在我们开始安装,我们将使用下面的命令来安装Apache2和Tomcat:

sudo apt-get install apache2    
sudo apt-get install tomcat7
sudo apt-get install tomcat7-admin

下面,我们将会使用如下的命令来创建一个测试程序:

cd /var/lib/tomcat7/webapps
sudo mkdir tomcat-demo
sudo mkdir tomcat-demo/goodmoring
sudo vim tomcat-demo/helloworld/index.jsp

并粘贴下面的代码到上述的 index.jsp:

<HTML> 
 <HEAD>  
  <TITLE>Good Morning</TITLE> 
 </HEAD> 
 <BODY>  
  <H1>Good Morning</H1>   
  Today is: <%= new java.util.Date().toString() %> 
 </BODY>
</HTML>

一切完毕后,我们将使用下面的命令安装和配置mod\_jk:

sudo apt-get install libapache2-mod-jk

我们需要使用下面的命令启用Tomcat的8443转发端口:

sudo vim /etc/tomcat7/server.xml

解除下面的注释行:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

之后,我们将用下面的命令为Apache创建workers.properties文件:

sudo vim /etc/apache2/workers.properties

粘贴下面的行:

# Define 1 real worker using ajp13 
 worker.list=worker 
 # Set properties for worker (ajp13) 
 worker.worker.type=ajp13 
 worker.worker.host=localhost
 worker.worker.port=8009

现在我们将使用下面的命令来让Apache使用这个worker:

sudo vim /etc/apache2/mods-available/jk.conf

我们将JkWorkersFile属性成下面这行:

/etc/apache2/workers.properties

最后配置Apache交给Tomcat处理的URL

sudo vim /etc/apache2/sites-enabled/000-default

我们将在配置文件中下面的行:

<VirtualHost *:80>
.......................................
.......................................
JkMount /tomcat-demo* worker1
</VirtualHost *:80>

现在用下面的命令重启服务来检查它们的功能:

sudo /etc/init.d/tomcat7 restart
sudo /etc/init.d/apache2 restart

总结

在本篇中我们展示了你该如何使用mod\_jk连接器配置和安装Apache2以及Tomcat7。


via: http://www.unixmen.com/integrate-apache2-tomcat-7-using-mod_jk-connector/

作者:anismaj 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

通常,大多数默认设置安装的web服务器存在信息泄露,这其中之一就是PHP。PHP 是如今流行的服务端html嵌入式语言(之一?)。在如今这个充满挑战的时代,有许多攻击者会尝试发现你服务端的漏洞。因此,我会简单描述如何在Linux服务器中隐藏PHP信息。

默认上expose\_php默认是开的。关闭“expose\_php”参数可以使php隐藏它的版本信息。

[root@centos66 ~]# vi /etc/php.ini

在你的php.ini, 定位到含有expose\_php的那行把On设成Off:

expose_php = Off

在此之前,web服务器头看上去就像这样:

[root@centos66 ~]# curl -I http://www.ehowstuff.com/

HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.3
X-Pingback: http://www.ehowstuff.com/xmlrpc.php
Date: Wed, 11 Feb 2015 14:10:43 GMT
X-Page-Speed: 1.9.32.2-4321
Cache-Control: max-age=0, no-cache

更改并重启 Web 服务后,php就不会在web服务头中显示版本了:

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 11 Feb 2015 15:38:14 GMT
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Pingback: http://www.ehowstuff.com/xmlrpc.php
Date: Wed, 11 Feb 2015 14:10:43 GMT
X-Page-Speed: 1.9.32.2-4321
Cache-Control: max-age=0, no-cache

LCTT译注:除了 PHP 的版本之外,Web 服务器也会默认泄露版本号。如果使用 Apache 服务器,请参照此文章关闭Apache 版本显示;如果使用 Nginx 服务器,请在 http 段内加入server_tokens off; 配置。以上修改请记得重启相关服务。


via: http://www.ehowstuff.com/how-to-hide-php-version-in-linux/

作者:skytech 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出