Linux下,Apache几种功能的学习练习(包括authentication,alias,proxy)

本文主要通过几个有关apache中httpd.conf文件设置的小练习,来熟悉一些基本的apache功能实现。


Test1

Deny the Deny the ip address to request some special page.

此功能的实现主要通过加入Order Allow,Deny顺序进行实现。有两种方式。

方式一

在httpd.conf中加入一个Directory字段

<Directory />
    Order Allow,Deny
    Allow from all
    Deny from xxx.xxx.xxx.xxx #阻止一个ip访问
    Deny from xxx.xxx.xxx.xxx/xxx #阻止一个ip段访问
</Directory>

这个字段表示,对于对本服务器所有的访问请求,先允许,后拒绝,允许的范围是所有,然后再拒绝特定字段ip,当然,我们还可以反着写,来实现只允许特定ip访问的功能,如下

<Directory />
    Order Deny,Allow
    Deny from all
    Allow from xxx.xxx.xxx.xxx #允许一个ip访问
    Allow from xxx.xxx.xxx.xxx/xxx #允许一个ip段访问
</Directory>

上面就实现了先拒绝再允许指定ip的操作。

方式二

如果服务器开了多个虚拟主机,也可以在VirtualHost字段添加Location字段实现这个功能,如下

<VirtualHost *:8000>
    DocumentRoot /usr/local/httpd/htdocs
    DirectoryIndex 002.gif
    ServerName localhost:8000
    <Location />
        Order Allow,Deny
        Allow from all
        Deny from all
    </Location>
</VirtualHost>

禁止通过IP访问功能

通过以上练习,我们可以用虚拟主机加这个方法,实现禁止用户通过我们的IP访问我们的网站,而只能通过域名访问的功能。如下

<VirtualHost *:8000>
    ServerName localhost:8000
    <Location />
        Order Allow,Deny
        Allow from all
        Deny from all
    </Location>
</VirtualHost>

<VirtualHost *:8000>
    DocumentRoot /usr/local/httpd/htdocs
    DirectoryIndex 002.gif
    ServerName www.mengze.wang:8000
</VirtualHost>

如上,其实实现方法就是我们给一个网站添加了两个虚拟主机,一个servername用IP表示,一个用域名表示。我们先禁止了通过IP的虚拟主机的所有访问,然后不限制通过域名的访问,就达到了这个目的。


Test 2

User authentication

此功能主要通过apache自带的htpassed工具进行密码创建,然后通过指定目录下的AllowOverride设置来实现。

首先用htpassed工具创建账户密码,htpassed在bin目录下。

#cd /usr/local/httpd/bin
#./htpassed -bc /usr/local/httpd/mima/.mima1 ben 123456

-b代表密码明文写在后米,不加b的话,命令后面不能直接接密码,输入命令之后会要求输入两遍密码。
-c代表新建密码文件,第一次建立需要,之后向其中添加账户就不需要。

然后编辑httpd.conf文件

#vim $conf (为了方便我设置了环境变量conf="usr/local/httpd/conf/httpd.conf")

<Directory "/usr/local/httpd/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride Authconfig
    AuthType Basic
    AuthName "Enter your passwd"
    AuthUserFile /usr/local/httpd/mima/.mima1
    Require user ben
</Directory>

之后重启httpd服务就好用了,会提示输入用户名密码。


Test 3

Maps web paths into filesystem paths and is used to

此功能主要通过aliasmod实现,在httpd.conf文件中打开相关mod,然后在需要指定别名的目录字段之前加上Alias字段即可。举例如下

LoadModule alias_module modules/mod_alias.so

Alias /readme "/usr/local/httpd/htdocs/add"
<Directory "/usr/local/httpd/htdocs/add">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
</Directory>

这样就可以在浏览器里直接通过hostname/readme访问服务器中/usr/local/httpd/htdocs/add目录下的内容。


proxy代理功能的实现

用多个域名直接访问服务器的多个端口

这就是之前我自己琢磨做的一个小功能,有这个需求是因为我租了一个服务器和一个域名,域名解析到服务器IP,之后在上面搭建了一个博客。搭建博客我用的是一个叫hexo的专门用来做博客的软件,不是用httpd,博客搭建好后,用hexo监听80端口开启服务,在浏览器输入我租用的域名,就可以访问博客了。

之后我又租了两个域名,但是不知道做什么用,就想都解析到之前租用的服务器IP上,用httpd服务做两个小网站。

但是问题来了,在浏览器里输入域名,访问网站,默认都是访问80端口,但是我服务器的80端口已经被hexo软件占用,来访问博客了,其他的域名解析到我的服务器IP后,直接输入域名也只会访问到我的博客,不能到新的网站。

当然我可以在httpd里多开两个端口监听,比如5000,8000端口,然后新建两个VirtualHost对应到5000,8000端口,servername填我之后申请的两个域名,但是这样做的话,我每次在浏览器输入域名之后都要加上“:端口号”,这样很不方便。

或者就是关了hexo软件,把博客迁移到httpd里来,开三个VirtualHost,都对应到80端口,Servername填三个域名,对应不同的根目录,但是hexo还是很方便的,我不想关软件。

总之,我想要实现的是,在hexo软件不关闭的情况下,httpd服务也开启,三个域名分别能直接访问我的博客和其他两个网站。

实现的方法就是用Proxy代理功能。首先在httpd.conf里开启几个mod

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

然后监听三个端口

Listen 80    #用来代理
Listen 5000  #网站1端口
Listen 8000  #网站2端口

hexo服务我开了4000端口,作为博客访问的端口

hexo s -p 4000

然后新开两个VirtualHost作为新网站

<VirtualHost *:5000>
    DocumentRoot /usr/local/httpd/htdocs
    DirectoryIndex 001.jpg
    ServerName localhost:5000 #写localhost或者域名都可以,因为都解析到IP,下同
</VirtualHost>

<VirtualHost *:8000>
    DocumentRoot /usr/local/httpd/htdocs
    DirectoryIndex 002.gif
    ServerName www.mengze.wang:8000
</VirtualHost>

然后加对应的代理VirtualHost

<VirtualHost *:80>

    ServerName  www.luyiminggonnabeok.cn #博客

    ServerAlias www.luyiminggonnabeok.cn

    ProxyPreserveHost On

    ProxyRequests Off

    ProxyPass / http://123.207.249.242:4000/

    ProxyPassReverse / http://123.207.249.242:4000/

</VirtualHost>


<VirtualHost *:80>

    ServerName  www.zoeswan.wang #网站1

    ServerAlias www.zoeswan.wang

    ProxyPreserveHost On

    ProxyRequests Off

    ProxyPass / http://123.207.249.242:5000/

    ProxyPassReverse / https://123.207.249.242:5000/

</VirtualHost>

<VirtualHost *:80>

    ServerName  www.mengze.wang #网站2

    ServerAlias www.mengze.wang

    ProxyPreserveHost On

    ProxyRequests Off

    ProxyPass / http://www.mengze.wang:8000/

    ProxyPassReverse / http://mengze.wang:8000/

</VirtualHost>

这样通过代理,就可以把同是80端口的请求转发到对应的不同端口上,实现了需求。

代理功能还有很多其他的用处,比如将请求转发到同网段其他主机处理等等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值