标签 Apache 下的文章

用 Apache HTTP 服务器的 mod\_rewrite 功能创建你自己的短链接。

很久以前,人们开始在 Twitter 上分享链接。140 个字符的限制意味着 URL 可能消耗一条推文的大部分(或全部),因此人们使用 URL 缩短服务。最终,Twitter 加入了一个内置的 URL 缩短服务(t.co)。

字符数现在不重要了,但还有其他原因要缩短链接。首先,缩短服务可以提供分析功能 —— 你可以看到你分享的链接的受欢迎程度。它还简化了制作易于记忆的 URL。例如,bit.ly/INtravelhttps://www.in.gov/ai/appfiles/dhs-countyMap/dhsCountyMap.html更容易记住。如果你想预先共享一个链接,但还不知道最终地址,这时 URL 缩短服务可以派上用场。。

与任何技术一样,URL 缩短服务并非都是正面的。通过屏蔽最终地址,缩短的链接可用于指向恶意或冒犯性内容。但是,如果你仔细上网,URL 缩短服务是一个有用的工具。

我们之前在网站上发布过缩短服务的文章,但也许你想要运行一些由简单的文本文件支持的缩短服务。在本文中,我们将展示如何使用 Apache HTTP 服务器的 mod\_rewrite 功能来设置自己的 URL 缩短服务。如果你不熟悉 Apache HTTP 服务器,请查看 David Both 关于安装和配置它的文章。

创建一个 VirtualHost

在本教程中,我假设你购买了一个很酷的域名,你将它专门用于 URL 缩短服务。例如,我的网站是 funnelfiasco.com,所以我买了 funnelfias.co 用于我的 URL 缩短服务(好吧,它不是很短,但它可以满足我的虚荣心)。如果你不将缩短服务作为单独的域运行,请跳到下一部分。

第一步是设置将用于 URL 缩短服务的 VirtualHost。有关 VirtualHost 的更多信息,请参阅 David Both 的文章。这步只需要几行:

    <VirtualHost *:80>
        ServerName funnelfias.co
    </VirtualHost>

创建重写规则

此服务使用 HTTPD 的重写引擎来重写 URL。如果你在上面的部分中创建了 VirtualHost,则下面的配置跳到你的 VirtualHost 部分。否则跳到服务器的 VirtualHost 或主 HTTPD 配置。

    RewriteEngine on
    RewriteMap shortlinks txt:/data/web/shortlink/links.txt
    RewriteRule ^/(.+)$ ${shortlinks:$1} [R=temp,L]

第一行只是启用重写引擎。第二行在文本文件构建短链接的映射。上面的路径只是一个例子。你需要使用系统上使用有效路径(确保它可由运行 HTTPD 的用户帐户读取)。最后一行重写 URL。在此例中,它接受任何字符并在重写映射中查找它们。你可能希望重写时使用特定的字符串。例如,如果你希望所有缩短的链接都是 “slX”(其中 X 是数字),则将上面的 (.+) 替换为 (sl\d+)

我在这里使用了临时重定向(HTTP 302)。这能让我稍后更新目标 URL。如果希望短链接始终指向同一目标,则可以使用永久重定向(HTTP 301)。用 permanent 替换第三行的 temp

构建你的映射

编辑配置文件 RewriteMap 行中的指定文件。格式是空格分隔的键值存储。在每一行上放一个链接:

    osdc https://opensource.com/users/bcotton
    twitter https://twitter.com/funnelfiasco
    swody1 https://www.spc.noaa.gov/products/outlook/day1otlk.html

重启 HTTPD

最后一步是重启 HTTPD 进程。这是通过 systemctl restart httpd 或类似命令完成的(命令和守护进程名称可能因发行版而不同)。你的链接缩短服务现已启动并运行。当你准备编辑映射时,无需重新启动 Web 服务器。你所要做的就是保存文件,Web 服务器将获取到差异。

未来的工作

此示例为你提供了基本的 URL 缩短服务。如果你想将开发自己的管理接口作为学习项目,它可以作为一个很好的起点。或者你可以使用它分享容易记住的链接到那些容易忘记的 URL。


via: https://opensource.com/article/18/7/apache-url-shortener

作者:Ben Cotton 选题:lujun9972 译者:geekpi 校对:wxy

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

这是我们的 LAMP 系列教程的开始:如何在 Ubuntu 上安装 Apache web 服务器。

这些说明适用于任何基于 Ubuntu 的发行版,包括 Ubuntu 14.04、 Ubuntu 16.04、 Ubuntu 18.04,甚至非 LTS 的 Ubuntu 发行版,例如 Ubuntu 17.10。这些说明经过测试并为 Ubuntu 16.04 编写。

Apache (又名 httpd) 是最受欢迎和使用最广泛的 web 服务器,所以这应该对每个人都有用。

开始安装 Apache 之前

在我们开始之前,这里有一些要求和说明:

  • Apache 可能已经在你的服务器上安装了,所以开始之前首先检查一下。你可以使用 apachectl -V 命令来显示你正在使用的 Apache 的版本和一些其他信息。
  • 你需要一个 Ubuntu 服务器。你可以从 Vultr 购买一个,它们是最便宜的云托管服务商之一。它们的服务器价格每月 2.5 美元起。(LCTT 译注:广告 ≤\_≤ )
  • 你需要有 root 用户或具有 sudo 访问权限的用户。下面的所有命令都由 root 用户执行,所以我们不必为每个命令都添加 sudo
  • 如果你使用 Ubuntu,则需要启用 SSH,如果你使用 Windows,则应该使用类似 MobaXterm 的 SSH 客户端。

这就是全部要求和注释了,让我们进入安装过程。

在 Ubuntu 上安装 Apache

你需要做的第一件事就是更新 Ubuntu,这是在你做任何事情之前都应该做的。你可以运行:

apt-get update && apt-get upgrade

接下来,安装 Apache,运行以下命令:

apt-get install apache2

如果你愿意,你也可以安装 Apache 文档和一些 Apache 实用程序。对于我们稍后将要安装的一些模块,你将需要一些 Apache 实用程序。

apt-get install apache2-doc apache2-utils

*就是这样。你已经成功安装了 Apache *

你仍然需要配置它。

在 Ubuntu 上配置和优化 Apache

你可以在 Apache 上做各种各样的配置,但是主要的和最常见的配置将在下面做出解释。

检查 Apache 是否正在运行

默认情况下,Apache 设置为在机器启动时自动启动,因此你不必手动启用它。你可以使用以下命令检查它是否正在运行以及其他相关信息:

systemctl status apache2

check if apache is running

并且你可以检查你正在使用的版本:

apachectl -V

一种更简单的检查方法时访问服务器的 IP 地址,如果你得到默认的 Apache 页面,那么一切都正常。

更新你的防火墙

如果你使用防火墙(你应该使用它),则可能需要更新防火墙规则并允许访问默认端口。Ubuntu 上最常用的防火墙是 UFW,因此以下说明使用于 UFW。

要允许通过 80(http)和 443(https)端口的流量,运行以下命令:

ufw allow 'Apache Full'

安装常见的 Apache 模块

一些模块经常被建议使用,所以你应该安装它们。我们将包含最常见模块的说明:

使用 PageSpeed 加速你的网站

PageSpeed 模块将自动优化并加速你的 Apache 服务器。

首先,进入 PageSpeed 下载页并选择你需要的的文件。我们使用的是 64 位 Ubuntu 服务器,所以我们安装最新的稳定版本。使用 wget 下载它:

wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb

然后,使用以下命令安装它:

dpkg -i mod-pagespeed-stable_current_amd64.deb
apt-get -f install

重启 Apache 以使更改生效:

systemctl restart apache2
使用 mod\_rewrite 模块启动重写/重定向

顾名思义,该模块用于重写(重定向)。如果你使用 WordPress 或任何其他 CMS 来处理此问题,你就需要它。要安装它,只需运行:

a2enmod rewrite

然后再次重新启动 Apache。你可能需要一些额外的配置,具体取决于你使用的 CMS,如果有的话。为你的设置 Google 一下得到它的具体说明。

使用 ModSecurity 模块保护你的 Apache

顾名思义,ModSecurity 是一个用于安全性的模块,它基本上起着防火墙的作用,它可以监控你的流量。要安装它,运行以下命令:

apt-get install libapache2-modsecurity

再次重启 Apache:

systemctl restart apache2

ModSecurity 自带了一个默认的设置,但如果你想扩展它,你可以使用 OWASP 规则集

使用 mod\_evasive 模块抵御 DDoS 攻击

尽管 mod\_evasive 在防止攻击方面有多大用处值得商榷,但是你可以使用它来阻止和防止服务器上的 DDoS 攻击。要安装它,使用以下命令:

apt-get install libapache2-mod-evasive

默认情况下,mod\_evasive 是禁用的,要启用它,编辑以下文件:

nano /etc/apache2/mods-enabled/evasive.conf

取消注释所有行(即删除 #),根据你的要求进行配置。如果你不知道要编辑什么,你可以保持原样。

mod_evasive

创建一个日志文件:

mkdir /var/log/mod_evasive
chown -R www-data:www-data /var/log/mod_evasive

就是这样。现在重启 Apache 以使更改生效。

systemctl restart apache2

你可以安装和配置附加模块,但完全取决于你和你使用的软件。它们通常不是必需的。甚至我们上面包含的 4 个模块也不是必需的。如果特定应用需要模块,那么它们可能会注意到这一点。

用 Apache2Buddy 脚本优化 Apache

Apache2Buddy 是一个可以自动调整 Apache 配置的脚本。你唯一需要做的就是运行下面的命令,脚本会自动完成剩下的工作:

curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl

如果你没有安装 curl,那么你可能需要安装它。使用以下命令来安装 curl

apt-get install curl

额外配置

用 Apache 还可以做一些额外的东西,但我们会留下它们作为另一个教程。像启用 http/2 支持,关闭(或打开) KeepAlive,调整你的 Apache 甚至更多。这些东西你现在不需要做,但是如果你在网上找到了教程,并且如果你等不及我们的教程,那就去做吧。

使用 Apache 创建你的第一个网站

现在我们已经完成了所有的调优工作,让我们开始创建一个实际的网站。按照我们的指示创建一个简单的 HTML 页面和一个在 Apache 上运行的虚拟主机。

你需要做的第一件事是为你的网站创建一个新的目录。运行以下命令来执行此操作:

mkdir -p /var/www/example.com/public_html

当然,将 example.com 替换为你所需的域名。你可以从 Namecheap 获得一个便宜的域名。

不要忘记在下面的所有命令中替换 example.com

接下来,创建一个简单的静态网页。创建 HTML 文件:

nano /var/www/example.com/public_html/index.html

粘贴这些:

<html>
     <head>
       <title>Simple Page</title>
     </head>
     <body>
       <p>If you're seeing this in your browser then everything works.</p>
     </body>
</html>

保存并关闭文件。

配置目录的权限:

chown -R www-data:www-data /var/www/example.com
chmod -R og-r /var/www/example.com

为你的网站创建一个新的虚拟主机:

nano /etc/apache2/sites-available/example.com.conf

粘贴以下内容:

<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName example.com
     ServerAlias www.example.com
   
     DocumentRoot /var/www/example.com/public_html
    
     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

这是一个基础的虚拟主机。根据你的设置,你可能需要更高级的 .conf 文件。

在更新所有内容后保存并关闭文件。

现在,使用以下命令启用虚拟主机:

a2ensite example.com.conf

最后,重启 Apache 以使更改生效:

systemctl restart apache2

这就是全部了,你做完了。现在你可以访问 example.com 并查看你的页面。


via: https://thishosting.rocks/how-to-install-optimize-apache-ubuntu/

作者:ThisHosting 译者:MjSeven 校对:wxy

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

学习如何在 Apache 上托管你自己的网站,这是一个可靠、流行且易于配置的 Web 服务器。

我托管自己的网站已经有很多年了。自从 20 多年前从 OS/2 切换到 Linux 以来,我一直将 Apache 作为我的服务器软件。Apache 是可靠、流行的,且基本的安装配置也很容易。对于更复杂的设置(比如多个网站)也并不是那么困难。

Apache Web 服务器的安装和配置必须以 root 身份执行。 防火墙的配置也需要以 root 身份执行。 使用浏览器查看安装配置的结果应该以非 root 用户的身份完成。 (我在我的虚拟主机上使用 student 这个用户。)

安装

注意:我使用的实验环境是安装有 Fedora 27 的虚拟机,Apache 版本为 2.4.29。 如果您使用的是不同的发行版或不同版本的 Fedora,您的命令以及配置文件的位置和内容可能会有所不同。 但是,您需要修改的配置行是相同的。

Apache Web 服务器非常容易安装。 在我的 CentOS 6.x 服务器上,它只需要一个简单的 yum 命令。 它会安装所有必要的依赖(如果需要的话)。 我在我的 Fedora 虚拟机上使用了下面的 dnf 命令。 除了命令本身的名称之外, dnfyum 的语法是相同的。

dnf -y install httpd

这个虚拟机是个非常基础的桌面环境,我正在使用它作为编写书籍的测试平台。 即使在这个系统上,也只安装了六个依赖项,用了一分钟。

Apache 的所有配置文件都位于 /etc/httpd/conf/etc/httpd/conf.d 。网站的数据默认位于 /var/www,但如果你愿意,你可以改变它。

配置

Apache 主要的配置文件是 /etc/httpd/conf/httpd.conf 。 它包含许多在基本安装中不需要更改的配置。 实际上,只需对此文件进行一些更改即可启动并运行一个简单的网站。 该文件非常大,因此,我不会将这篇文章与大量不必要的东西混淆起来,而只会显示那些需要更改的指令。

首先,花点时间熟悉一下 httpd.conf 文件。我喜欢 Red Hat 的一个原因是它的配置文件注释非常的详细。 httpd.conf 文件也不例外,因为它有很好的注释。可以使用这些注释来了解文件的配置。

第一个要修改的是 Listen 配置项,它定义了 Apache 要监听页面请求的 IP 地址和端口。 现在,你只需要使这个网站可以从本地访问,所以使用 localhost 地址。 完成后,该行应该看起来像这样:( LCTT 译注:localhost 的 IP 地址是 127.0.0.180 是端口)

Listen 127.0.0.1:80

通过将此配置项设置为 localhost的 IP 地址,Apache 将只侦听来自本地主机的连接。 如果您希望 Web 服务器侦听来自远程主机的连接,则可以使用主机的外部 IP 地址。

DocumentRoot 配置项指定组成网站页面的 HTML 文件的位置。 该配置项不需要更改,因为它已经指向标准位置。 该行应该看起来像这样:

DocumentRoot "/var/www/html"

Apache 安装包会创建 /var/www 目录。 如果您想更改存储网站文件的位置,则使用此配置项来完成此操作。 例如,您可能想要为 www 目录使用不同的名称,以更明确地识别网站。 这可以是这样的:

DocumentRoot "/var/mywebsite/html"

这些是创建一个简单网站需要唯一修改的 Apache 配置项。 对于这个小练习,只对 httpd.conf 文件(Listen 配置项)进行了一些修改。 其它的配置项对于一个简单的 Web 服务器暂时无需配置。

另一个需要改变的地方是:在我们的防火墙中打开端口 80。 我使用 iptables 作为我的防火墙,因此我更改 /etc/sysconfig/iptables 文件以添加允许使用 HTTP 协议。 整个文件看起来像这样:

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

我在文件的倒数第三行上添加了一个新行,它允许在端口 80 上输入流量。现在我重新加载 iptables 配置文件。

[root@testvm1 ~]# cd /etc/sysconfig/ ; iptables-restore iptables

创建 index.html 文件

index.html 文件是你使用域名访问网站而不是访问特定网页时的默认文件。在 /var/www/html中,创建一个名字为 index.html 的文件,在其中添加字符串 Hello World 。你不需要添加任何的 HTML 标志去完成这项工作。web 服务器的唯一任务是提供文本数据流,服务器不知道数据是什么,也不知道如何呈现它。它只是将数据流传输给请求主机。

保存文件后,将所有权设置为 apache.apache

[root@testvm1 html]# chown apache.apache index.html

启动 Apache

Apache 很容易启动。 当前版本的 Fedora 使用 systemd 。 运行以下命令启动它,然后检查服务器的状态:(LCTT 译注:systemctl 是一个 systemd 工具)

[root@testvm1 ~]# systemctl start httpd
[root@testvm1 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-02-08 13:18:54 EST; 5s ago
     Docs: man:httpd.service(8)
 Main PID: 27107 (httpd)
   Status: "Processing requests..."
    Tasks: 213 (limit: 4915)
   CGroup: /system.slice/httpd.service
           ├─27107 /usr/sbin/httpd -DFOREGROUND
           ├─27108 /usr/sbin/httpd -DFOREGROUND
           ├─27109 /usr/sbin/httpd -DFOREGROUND
           ├─27110 /usr/sbin/httpd -DFOREGROUND
           └─27111 /usr/sbin/httpd -DFOREGROUND

Feb 08 13:18:54 testvm1 systemd[1]: Starting The Apache HTTP Server...
Feb 08 13:18:54 testvm1 systemd[1]: Started The Apache HTTP Server.

您的服务器上的命令可能不同。在使用 SystemV 启动脚本的 Linux 系统上,命令如下:

[root@testvm1 ~]# service httpd start
Starting httpd: [Fri Feb 09 08:18:07 2018]          [  OK  ]
[root@testvm1 ~]# service httpd status
httpd (pid  14649) is running...

如果您的主机上有像 Firefox 或 Chrome 这样的浏览器,您可以在浏览器的 URL 行上使用 URL localhost 来显示您的 web 页面,尽管看起来很简单。您还可以使用像 Lynx 这样的文本模式 web 浏览器来查看 web 页面。首先,安装 Lynx (如果它还没有被安装)。

[root@testvm1 ~]# dnf -y install lynx

然后使用下面的命令来显示网页。

[root@testvm1 ~]# lynx localhost

结果在我的终端中是这样的。我已经删除了页面上的很多空白。

  Hello World

<snip>


Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
  Arrow keys: Up and Down to move.  Right to follow a link; Left to go back.
 H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list```

接下来,编辑您的 index.html 文件并添加一些 HTML 标记,使其看起来像这样:

<h1>Hello World</h1>

现在刷新浏览器。对于 Lynx,使用组合键 Ctrl + R 。 结果看起来有点不同。如果你的终端支持彩色的话文本是彩色显示的,Lynx 会显示标题,现在它处于居中状态。 在 GUI 浏览器中,文本将以大字体显示。

                                   Hello World

<snip>


Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
  Arrow keys: Up and Down to move.  Right to follow a link; Left to go back.
 H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

后记

从这个小练习中可以看到,建立一个 Apache Web 服务器很容易。 具体情况取决于您的发行版和该发行版提供的 Apache 版本。 在我的环境中,这是一个非常简单的练习。

但不仅仅如此,因为 Apache 非常灵活强大。下个月,我将讨论使用单个 Apache 托管多个网站。


via: https://opensource.com/article/18/2/how-configure-apache-web-server

作者:David Both 译者:amwps290 校对:wxy

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

关于 React.js 的开源许可证从去年 7 月份争议到现在,Apache 基金会终于确认了立场,反对使用 React.js 和 Facebook 其他使用此许可证(BSD+Patents licensed)的流行软件。

最近,随着开源运动不断壮大,这边 LC3 大会刚过去不久,人们的热情还是未曾消去,那边 Apache 和 Facebook 又搅动着整个社区。

作为本次事件焦点的 Facebook Patents license 已经不是第一次出风头了,时不时成为人们讨论的主题。

上一次挑动大众神经是在 2016 年 7 月,Facebook 给 React 应用的开源许可协议是,在 BSD3-clause 协议基础上加上旨在保护 Facebook 自身的扩展协议。而这一次依然是围绕 Facebook Patents license 展开,简单梳理此次事件:

  • 2017 年 4 月,Apache Cassandra 项目正考虑增加 RocksDB 作为存储引擎,但考虑到专利授权的问题,Jeff Jirsa 向 Apache 法律社区寻求意见。
  • 2017 年 6 月,Apache 法律社区开始讨论 Facebook Patents license 协议专利授权的不对称性问题,且该协议与Apache Software License(即 Apache 2.0 等)不兼容。
  • 2017 年 7 月 15 日,Apache Software Foundation(以下简称 ASF)主管兼法律事务副主席 Chris Mattmann 正式发表声明称:Facebook BSD+Patents license(以下简称 FB+PL)已经正式被列入 “CategoryX” 列表,因此 Apache 项目中将不能够包含或依赖于 Facebook Patents license 的代码;而已经发布的代码,涉及 FB+PL 许可证的,需要在 8 月 31 号前完成替换。

这一结论一出场便自带光环,引起了整个社区的关注,包括国内著名社交论坛知乎。当然,其对 Apache 项目自身的影响不比外界的关注度低。

如,虽然 Facebook 已于本月 17 号将 RocksDB 许可证更新为 Apache 2.0 和 GPLv2 双许可,但更大的问题是 React 也是基于 FB+PL 开源,Apache 的 CouchDB 项目、Apache Superset 项目等都依赖于 React,但是要让其开发人员在一个月内摆脱对 React 的依赖似乎也不是一件简单的事情。

到底是什么原因让 ASF 对 Facebook 的 FB+PL 许可协议下禁止令?要回答这个问题,需要先分析一下 FB+PL 许可协议。

众所周知,Facebook 也算是开源社区的中坚力量,截至目前已经发布了很多开源软件技术,包括使用广泛的 React.JS 框架和键值数据库 RocksDB。

不过,Facebook 没有像其他社区一样,自定义自己的开源许可证,也没有仅采用现存的开源许可证,而是采用 “BSD+Patents license” 许可证组合授权其大部分项目,该协议组合也被称为 FB+PL 组合。

其中,BSD 是指 BSD3-clause license,是被 OSI 和 FSF 都认可的开源软件许可证,也是被业界称为“宽松型”的开源许可证。

正是这个“宽松型”的 BSD 许可证附加了专利条款的开源许可协议,已经被 ASF 列为 “Category X”,杜绝了任何以 FB+PL 授权的软件进入 Apache 项目中的可能性,等于 FB+PL 已被 Apache 明确打入冷宫。

FB+PL 协议中,BSD3-clause license 本身没有问题,问题自然就出在 Facebook Patents license,即 Facebook 开源软件组合协议 FB+PL 中的附加专利许可条款。

以下是 Facebook Patents license 条款内容

Additional Grant of Patent Rights Version 2

"Software" means the React software distributed by Facebook, Inc.

Facebook, Inc. ("Facebook") hereby grants to each recipient of the Software
("you") a perpetual, worldwide, royalty-free, non-exclusive, irrevocable
(subject to the termination provision below) license under any Necessary
Claims, to make, have made, use, sell, offer to sell, import, and otherwise
transfer the Software. For avoidance of doubt, no license is granted under
Facebook's rights in any patent claims that are infringed by (i) modifications
to the Software made by you or any third party or (ii) the Software in
combination with any software or other technology.

The license granted hereunder will terminate, automatically and without notice,
if you (or any of your subsidiaries, corporate affiliates or agents) initiate
directly or indirectly, or take a direct financial interest in, any Patent
Assertion: (i) against Facebook or any of its subsidiaries or corporate
affiliates, (ii) against any party if such Patent Assertion arises in whole or
in part from any software, technology, product or service of Facebook or any of
its subsidiaries or corporate affiliates, or (iii) against any party relating
to the Software. Notwithstanding the foregoing, if Facebook or any of its
subsidiaries or corporate affiliates files a lawsuit alleging patent
infringement against you in the first instance, and you respond by filing a
patent infringement counterclaim in that lawsuit against that party that is
unrelated to the Software, the license granted hereunder will not terminate
under section (i) of this paragraph due to such counterclaim.

A "Necessary Claim" is a claim of a patent owned by Facebook that is
necessarily infringed by the Software standing alone.

A "Patent Assertion" is any lawsuit or other action alleging direct, indirect,
or contributory infringement or inducement to infringe any patent, including a
cross-claim or counterclaim.

就是以上这段不算长的附加专利授权条款,让不少开发者甚至开源社区组织顾虑重重。

对开源运动有了解的人可能都知道,开源社区对专利非常敏感,甚至有开源大佬和前辈毫不掩饰对软件专利的厌恶和痛恨。更甚者,国外有专门的反软件专利组织,但毕竟专利制度是很多国家的法律制度,不可能受某个人或某一个群体的人的意见而转移。

因此,开源社区能做的就是改变自己以及影响自己可以影响的人,所以不少开源软件许可证都有针对专利的规范条款。

不过,对于 Facebook 附加专利许可协议,开源圈内人士从一开始都不是特别待见。甚至一些反对软件专利的人认为 FB+PL 协议关于专利的授权,拥有这样的专利授权比没有这样的授权更糟糕。

究其原因,从以上 Facebook Additional Grant of Patent Rights(附加专利授权条款)可以看出,该协议是一个单边优惠协议,授予人和被授予人的权利不平衡。

简单说就是基于 FB+PL 授权的软件使用者以及基于 FB+PL 开发衍生代码的开发者,与 Facebook 的权利不平衡。一旦被许可人对 Facebook 及其子公司甚至关联公司提出直接的或间接专利诉讼,无论该诉讼是与所涉及项目有关还是无关,亦或是硬件专利诉讼,甚至是 Facebook 主动提出的专利诉讼而被告者进行的专利反诉,该协议授予用户的专利权利即刻自动终止。

另外,2015 年 4 月 10 以前,Facebook Additional Grant of Patent Rights 第一版中,针对 Facebook 任何形式的诉讼,包括反诉、以及与专利无关的诉讼,都会导致基于该协议的专利授权自动终止。后来由于社区人员对该条款争议较大, Facebook 进行了修改,也即是目前的第二版

值得一提的是,在众多的开源许可证中,有专利权利终止以及许可证权利终止条款的许可证并不少见,例如,Apache2.0 以及GPLv2/v3 都有关于权利终止的条款约束。之所以 FB+PL 会有如此强烈的反应关键有两点:

  1. FB+PL 专利终止条款过于宽泛;
  2. FB+PL 专利条款使得被授予者与 Facebook 之间的权利不平衡。

从另一个层面上讲,Facebook 附加专利授权条款的存在也不是全无道理,毕竟开源软件无时无刻不在承受着来自软件专利的威胁。尽管这些年软件专利没有成功将开源运动送入坟墓,反而使其不断壮大,而开源社区对专利的排斥和恐惧却已深入骨髓。

Facebook 作为开源领域一员猛将,并且已经开源了大量的代码和技术,将所有可能导致侵权的专利技术授权给用户。另一方面,为了自身防护的原因,想办法建立一种自保的机制也在情理之中,毕竟谁都不想成为被鱼肉被屠宰的一方。

整体来讲,Facebook 附加专利授权条款是一个带有严格的惩罚性措施的协议,其严厉性特别表现在其第一版,虽然在第二版中,将诉讼范围限定于专利诉讼,但在许多人看来其范围依然是过大。

Facebook 附加专利授权条款有一种过激的表现,但是如果你能想象一个刚刚崭露头角的少年,还未有可观的积蓄(专利),在群狼环嗣,个个武装到牙齿的对手面前,那种本能的警惕,也许会对 Facebook 多少有点理解。

毕竟,即便 Facebook 附加专利授权条款在严格,对于个人开发者,以及不喜欢搞专利诉讼的组织来说,大家彼此相安无事,也不失为一件好事。

就我个人来讲,我对 Facebook 之于开源的真诚性是认可的。

目前,虽然“ 开源软件 Open Source Software ”和“ 自由软件 Free Software ”两种哲学理念还存在分歧,但很多社区以及组织包括像 Facebook 这样自我保护略显偏激的组织,都是开源/自由软件理念真诚的践行者。还有一部分像微软一样“从良”的,也为开源做了不少贡献,像这种老牌的商业公司背负了太多的包袱,一下子转身可能性不大。

当然,浑水摸鱼以及投机的分子也肯定不少。不过,开源是软件开发的未来趋势和必然走向,开源理念不仅避免了重复开发中时间、人力和资金了浪费,更是智力共享、集体智慧的完美实践。

因此,虽然目前开源运动还存在着种种的冲突和矛盾,但就像所有的新生事物一样,从萌芽到成长再到成熟都会有一个过程,而在这个过程中磕磕绊绊在所难免。

整体上说,这次 Apache 对 Facebook 附加专利授权条款下禁止令,只是开源运动在一件小事,而开源的生命力正是在这种碰撞、冲突和磨合中逐渐显现,慢慢成熟。

(题图:react-etc.net)


作者简介:付钦伟,专利代理人、专利咨询师,任职于集慧智佳知识产权咨询公司。研究生选专业“误入歧途”,进入高大上的知识产权领域,目前从事专利咨询分析工作,励志为中国知识产权事业抛头颅、洒热血。

嗨,大家好,今天我们来聊聊 80 端口之战。著名的技术漫画站 turnoff.us 有这样的一副漫画,生动的描绘了固守 80 端口的 Apache 和新生代的 Nginx 之间的战争。你知道,80 端口是 Web 端口,就是这个端口构成了我们现在大部分的互联网。

作为新生代的 Nginx 对已经 22 岁之老的 Apache 说,“一边去,老头,这 80 口不用你看着了,你得给新人腾腾地方了!”

头顶羽毛(Apache 的 Logo 形象),身上的写着名字的牌子都是补上去的(a patch,即 Apache 这个词的出处)一脸懵逼,对小毛头 Nginx 说,“放尊重点,你觉得你已经能取代像我这样的老同志了吗?!”

“哈?C10K 你解决了吗?事件驱动呢?这些你行吗?”Nginx 说。(C10K 指并发上万连接,由于服务器和网络性能的提升,现在的服务程序面临着处理更大并发的请求,而一些老旧的应用面对这种大量请求显然有点力不从心)

“嗯,我可以给你一个‘小小’的列表,这都是我支持的模块……” Apache 顾左右而言它。

“这些都过时了!我猜它们根本就没人用过!” Nginx 看着那“小小”的列表,一脸嫌弃的反驳。(讲真,Apache 的很多模块你可能从未用过,尤其是那些内置的模块,而另外一些年久失修的第三方模块,甚至你都不知道能不能用了)

一看这么多模块唬不住 Nginx,Apache 又把 PHP、MySQL 等小弟叫出来助阵,“这些都是我的铁杆兄弟!”

“嘿,谁怕谁啊,谁没兄弟啊,我也有啊” Nginx 拽出来焕发了第二春的 Postgres 数据库和曾经的明日之星 Ruby,不过感觉这些兄弟们有点不太给力 :-d 。

那么你猜猜谁会赢?买定离手啊~

确保 Apache web 服务器安全 是最重要的任务之一,特别是在你的网站刚刚搭建好的时侯。

比方说,如果你 Apache 服务目录 (/var/www/tecmint/var/www/html/tecmint) 下创建一个名为 tecmint 的目录,并且忘记在该目录放置 index.html,你会惊奇的发现所有访问者都可以在浏览器输入 http://www.example.com/tecmint 来完整列举所有在该目录中的重要文件和文件夹。

本文将为你展示如何使用 .htaccess 文件禁用或阻止 Apache 服务器目录列举。

以下便是不存在 index.html ,且未采取防范措施前,目录的列举的情况。

Apache 目录列举

Apache 目录列举

首先,.htaccess (hypertext access) 是一个文件,它可以让站点管理员控制服务器的环境变量以及其他的重要选项,用以增强他/她的站点功能。

欲知更多关于该重要文件的信息,请阅读以下文章,以便通过 .htaccess 的方法来确保 Apache Web 服务器的安全。

  1. 确保 Apache Web 服务器安全的 25 条 .htaccess 设置技巧
  2. 使用 .htaccess 为 Apache Web 目录进行密码保护

使用这一简单方法,在站点目录树中的任意/每个目录创建 .htaccess 文件,以便为站点根目录、子目录和其中的文件提供保护支持。

首先要 Apache 主配置文件中为你的站点启用 .htaccess 文件支持。

$ sudo vi /etc/apache2/apache2.conf    #Debian/Ubuntu 系统
$ sudo vi /etc/httpd/conf/httpd.conf   #RHEL/CentOS 系统

然后寻找以下部分,其中 AllowOverride 指令必须设置为 AllowOverride All

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
</Directory>

如果已存在 .htaccess 文件,先备份(如下),假设文件在 /var/www/html/tecmint/ (并要禁用该目录列举):

$ sudo cp /var/www/html/tecmint/.htaccess /var/www/html/tecmint/.htaccess.orig  

然后你就可以在某个特定的目录使用你喜欢的编辑器打开 (或创建) 它,以便修改。并添加以下内容来关闭目录列举。

Options -Indexes 

下一步就是重启 Apache Web 服务器:

-------- 使用 SystemD 的系统 -------- 
$ sudo systemctl restart apache2
$ sudo systemctl restart httpd
-------- 使用 SysVInit 的系统 -------- 
$ sudo /etc/init.d/apache2 restart 
$ sudo /etc/init.d/httpd restart

现在来验证效果,在浏览器中输入:http://www.example.com/tecmint,你会得到类似如下的信息:

Apache 目录列举已禁用

Apache 目录列举已禁用

在本文中,我们描述了如何使用 .htaccess 文件来禁用 Apache Web 服务器的目录列举。之后我们会介绍两种同样简单的我方法来实现这一相同目的。随时保持联系。

像往常一样,在下方反馈表单中给我们发送关于本文的任何想法。


作者简介:

Aaron Kili 是一名 Linux 和 F.O.S.S 忠实拥护者、未来的 Linux 系统管理员、Web 开发者,目前是 TecMint 的原创作者,热衷于计算机并乐于知识分享。


译者简介:

GHLandy - 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。


via: http://www.tecmint.com/disable-apache-directory-listing-htaccess/

作者:Aaron Kili 译者:GHLandy 校对:wxy

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