Lighttpd下的https强制跳转

考虑到以后可能会出现的敏感内容,于是申请并且安装了个免费的startssl的证书,然后~打算看看怎么才能强制使用ssl连接。。。

以下内容摘自:http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps

 

How to redirect HTTP requests to HTTPS

Since 1.4.19 the following should work. For older versions check the history of this page… or just update, srsly.

Example 1 – redirect everything

$HTTP["scheme"] == "http" {
    # capture vhost name with regex conditiona -> %0 in redirect pattern
    # must be the most inner block to the redirect rule
    $HTTP["host"] =~ ".*" {
        url.redirect = (".*" => "https://%0$0")
    }
}

Example 2 – specific url

$HTTP["scheme"] == "http" {
    $HTTP["host"] =~ ".*" {
        url.redirect = ("^/phpmyadmin/.*" => "https://%0$0")
    }
}

Example 3 – only for specific vhost and url

$HTTP["scheme"] == "http" {
    $HTTP["host"] == "sth.example.com" {
            url.redirect = ("^/phpmyadmin/.*" => "https://sth.example.com$0")
    }
}

Further stuff

Also works the other way round (https -> http) with if $HTTP["scheme"] == "https"

Lighttpd重定向配置

有时候需要将一个url重定向到另外一个url上。 如最简单的将不带www的域名重定向到www上,例如将domain.com重定向到www.domain.com上。这时候,Lighttpd的mod_redirect模块就起作用了。

这时候就可以使用mod_redirect模块。 如上面的例子可以在/etc/lighttpd/lighttpd.conf中使用下面的代码来解决:
1. 激活配置文件中的mod_redirect模块,去掉其前面的#
2. 插入下面代码

1
2
3
4
5
$HTTP["host"] =~ "^([^.]+.[^.]+)$" {
  url.redirect = (
      ".*" => "http://www.%1"
  )
}

其中,%1表示$HTTP[“host”] 中正则表达式中括号中匹配的内容。%1表示第一个匹配值,%2表示第二个匹配值。%0表示整个字符串

再如,希望把www.prosight.me/blog/index.php/2009/03/archives/321这样的url跳转到blog.prosight.me/index.php/2009/03/321这个url上的话,就使用如下配置:

1
2
3
4
5
6
7
$HTTP["host"] == "www.prosight.me" {
  url.redirect = (
       "^/blog/index.php/([0-9]+/[0-9]+)/archives/([0-9]+)$"
       => "http://blog.prosight.me/index.php/$1/$2",
       "^/blog(/)?$" => "http://blog.prosight.me"
  )
}

其中  $1表示在url.redirect里正则表达式中第一个括号匹配的内容,$2表示第二个匹配的内容,以此类推。

url.redirect可以放置在任何$HTTP[“host”] 块中,与其他模块共同使用。例如与rewrite一同使用,或者跟server.document-root属性一起使用来共同配置一个虚拟主机。

 

Lighttpd、Apache强制跳转https

这两者其实质都是通过重定向来实现的,只不过lighttpd不能使用.htaccess文件,所以它的配置是写在lighttpd.conf配置文件下的。两者方法如下

Lighttpd:

#vi /etc/lighttpd/lighttpd.conf

添加如下内容:

$HTTP[“scheme”] == “http” {
# capture vhost name with regex conditiona -> %0 in redirect pattern
# must be the most inner block to the redirect rule
$HTTP[“host”] =~ “.*” {
url.redirect = (“.*” => “https://%0$0”)
}
}

Apache:

Apache的重定向可以写在配置文件(具体位置根据安装方法不同,我的使用Debian下直接apt-get的,其路径为 /etc/apache2/sites-enabled/000-default)

也可以直接写在目录的.htaccess文件下

如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容:

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$ //也可以这么写RewriteCond %{HTTPS} off,呵呵,下面的例子又是一种写法,至于为什么,自己想去
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]
如果对某个目录做https强制跳转,则复制以下代码:
RewriteEngine on
RewriteBase /yourfolder
RewriteCond %{SERVER_PORT} !^443$
#RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

或者这样

#RewriteCond %{HTTP_HOST} !=’你的域名(包括引号,不带http前缀哦)’ [NC,OR]
#RewriteCond %{HTTPS} !=on [NC]
#RewriteRule ^(.*)$ https://’你的域名加访问路径(含引号)’%{REQUEST_URI} [L,R=301]
如果只需要对某个网页进行https跳转,可以使用redirect 301来做跳转!

redirect 301  /你的网页 https://你的主机+网页

其实,rewrite规则就是正则表达式,具体的怎么写法,等有时间再整理下。

 

Debian下配置Apache的SSL连接

没啥好说的,看看我博客就知道了,虽然我用的Lighttpd,不过,作为比较泛滥的Apache还是顺便研究了下它的SSL连接配置。
1. 安装Apache2

Command代码
  1. sudo apt-get install apache2

2. 开启SSL模块

Command代码
  1. sudo a2enmod ssl

 

注:关闭模块使用 a2dismod 命令。

3. 创建证书
我们可以使用openssl来创建 ,我闲着蛋疼到startssl上申请了个免费的~

Command代码
  1. sudo openssl req -x509 -newkey rsa:1024 -keyout apache.pem -out apache.pem -nodes -days 999

在要求输入Common Name (eg, YOUR name) 时,输入你的主机名。 (别自己签的证书都不是给自己的哈~)

4、编辑SSL的配置

我们可以将当前的默认站点配置(000-default)文件拷贝一份(cp /etc/apache2/sites-enabled/000-default 001-ssl),然后进行修改

Command代码
  1. vi /etc/apache2/sites-enabled/001-ssl

把端口改为443,加入SSL认证配置。其它的根据需要自己定制 与普通配置无异。

NameVirtualHost *:443  //开头80改下443

ServerSignature On
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem  //添加上证书,把SSL开关打开,估计傻子都能看懂,后面啥的不用动了

ServerAdmin webmaster@localhost
#[……]

修改普通http方式的配置

Command代码
  1. nano /etc/apache2/sites-enabled/000-default

把端口改为80  //其实默认就是80~除非你想用别的。

NameVirtualHost *:80
ServerAdmin webmaster@localhost
#[……]

编辑Apache端口配置,加入443端口(SSL的)

Command代码
  1. vi /etc/apache2/ports.conf

其实说编辑不如说是检查,其实配置文件里已经判断了,如果开启了SSL模块就会监听443端口~懒得复制原始配置啦

 

重新载入Apache的配置

Command代码
  1. /etc/init.d/apache2 force-reload

或者重新启动Apache2

Command代码
  1. /etc/init.d/apache2 restart

轻轻松松就能开启SSL了,不过,当时申请了startssl的证书,花了点时间~我最后也没给这个实验性质的apache加上startssl上申请的证书,直接在lighttpd上加的~

 

Debian/CentOS安装eAccelerator

eAccelerator是神马?好吧,如果你不清楚麻烦问下Google吧~

1. 下载eAccelerator

没啥好说的,直接去官网下载吧~

2. 安装

2.1 准备工作

由于是直接编译安装,所以需要make模块,这个多数Linux系统上都会带,如果没有的话可以用以下命令安装。

 

1
2
3
4
# Debian Ubuntu 系列使用apt-get
apt-get install make
# 或者CentOS Fedora 系列使用yum
yum install make

由于安装过程中可能会用到/usr/bin/phpize这个命令,所以也需要事先安装下。

 

 

1
2
# Debian Ubuntu 系列使用下面的命令
apt-get install php5-dev

 

 

2.2 正式安装

 

1
2
3
4
5
6
7
8
9
10
11
12
gunzip eaccelerator-eaccelerator-42067ac.tar.gz
tar -xvf eaccelerator-eaccelerator-42067ac.tar
cd eaccelerator-eaccelerator-42067ac
/usr/bin/phpize
./configure -enable-eaccelerator=shared -with-php-config=/usr/bin/php-config
make
make install
cd ..
rm -rf eaccelerator-eaccelerator-42067ac
rm eaccelerator-eaccelerator-42067ac.tar.gz
mkdir /tmp/eaccelerator
chmod 777 /tmp/eaccelerator

每条命令是干啥的应该不用说了,除了最后两个是建立eAccelerator的缓冲文件夹外,其他的就是解压–配置–编译安装

 

2.3 配置eAccelerator

在 /etc/php.d/ 或者 /etc/php5/cgi/conf.d 中创建配置文件eaccelerator.ini:

 

1
vi /etc/php5/cgi/conf.d/eaccelerator.ini

 

 

对于OPENVZ和XEN两种形式的VPS使用不同的配置:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 以下针对OPENVZ
extension="eaccelerator.so"
eaccelerator.shm_size="0"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.keys = "disk_only"
eaccelerator.sessions = "disk_only"
eaccelerator.content = "disk_only"

# 以下针对XEN
extension="eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.keys = "shm_and_disk"
eaccelerator.sessions = "shm_and_disk"
eaccelerator.content = "shm_and_disk"

2.4 重启相关服务

 

 

1
2
3
4
5
6
7
8
# 重启apache
service httpd restart
# 重启lighttpd
service lighttpd restart
# 重启Nginx
invoke-rc.d nginx restart
# 重启PHP-CGI
invoke-rc.d php-cgi restart

3. 验证

 

这方法挺多的,我直接看探针,也可以vi一个phpinfo.php文件内容就是

 

1
2
3
<?php
  phpinfo();
?>

找得到eAccelerator就是安装成功了。或者试着打开若干PHP页面,然后切换到缓存目录 /tmp/eaccelerator,使用dir或者ls查看是否有缓存文件(夹),0 1 2 3 4 5 6 7 8 9 a b c d e f

 

 

1
2
cd /tmp/eaccelerator
dir

 

1
2
cd /tmp/eaccelerator
dir