解决安装SSL后重启apache需要输入密码的困扰

第一种方法(我就用这个):

1.  vi /etc/apache2/mods-available/ssl.conf

2.  注释SSLPassPhraseDialog  builtin,在后面加上SSLPassPhraseDialog exec:/etc/apache2/ssl/ssl_pass.sh

3.  vi /etc/apache2/ssl/ssl_pass.sh

4.  输入

     #!/bin/sh
    echo “你的ssl证书密码

5.  chmod +x /etc/apache2/ssl/ssl_pass.sh

6.  /etc/init.d/apache2 restart

这样就直接重启apache了,不需要再每次都输入恼人的证书密码

第二种方法(我没试验过,不针对unbuntu的):

1:去掉/usr/local/bin/apachectl startssl启动的pass phrase,用空pass phrase启动apache
(while preserving the original file):
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key
确认server.key 文件为root可读
$ chmod 400 server.key

开启Apache的headers和expires模块

Header 和 Expries 是用来控制浏览器的缓存控制模块,通过开启该模块并进行一定的设置可以有效加速网站减少请求数和数据流量。

一般我们可以通过设置 HTTP 响应的 Head 中的 expired 和 cache-control 来控制页面在浏览器中的缓存 例如: Cache-Control: max-age=1800 Expires: Wed, 18 May 2012 21:00:00 GMT 缓存最大时长为1800秒,设定的过期时间为2012-05-18 21:00:00 Apache开启这两个模块非常简单(Debian环境) a2enmod headers a2enmod expries 开启后重启下apache即可。 如何充分利用这两个模块,关键在于配置。该配置可以配置到.htaccess文件下也可以在apache的网页控制文件下加入 我是直接在配置文件 /etc/apache2/sites-enabled/000-default文件里配置的

# ----------------------------------------------------------------------
# Expires headers (for better cache control)
# ----------------------------------------------------------------------

# these are pretty far-future expires headers
# they assume you control versioning with cachebusting query params like
#   <script src="application.js?20100608">
# additionally, consider that outdated proxies may miscache 
#   www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

# if you don't use filenames to version, lower the css and js to something like
#   "access plus 1 week" or so

<IfModule mod_expires.c>
  ExpiresActive on

# Perhaps better to whitelist expires rules? Perhaps.
  ExpiresDefault                          "access plus 1 month"

# cache.appcache needs re-requests in FF 3.6 (thx Remy ~Introducing HTML5)
  ExpiresByType text/cache-manifest       "access plus 0 seconds"

# your document html 
  ExpiresByType text/html                 "access plus 0 seconds"

# data
  ExpiresByType text/xml                  "access plus 0 seconds"
  ExpiresByType application/xml           "access plus 0 seconds"
  ExpiresByType application/json          "access plus 0 seconds"

# rss feed
  ExpiresByType application/rss+xml       "access plus 1 hour"

# favicon (cannot be renamed)
  ExpiresByType image/x-icon              "access plus 1 week" 

# media: images, video, audio
  ExpiresByType image/gif                 "access plus 1 month"
  ExpiresByType image/png                 "access plus 1 month"
  ExpiresByType image/jpg                 "access plus 1 month"
  ExpiresByType image/jpeg                "access plus 1 month"
  ExpiresByType video/ogg                 "access plus 1 month"
  ExpiresByType audio/ogg                 "access plus 1 month"
  ExpiresByType video/mp4                 "access plus 1 month"
  ExpiresByType video/webm                "access plus 1 month"

# htc files  (css3pie)
  ExpiresByType text/x-component          "access plus 1 month"

# webfonts
  ExpiresByType font/truetype             "access plus 1 month"
  ExpiresByType font/opentype             "access plus 1 month"
  ExpiresByType application/x-font-woff   "access plus 1 month"
  ExpiresByType image/svg+xml             "access plus 1 month"
  ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

# css and javascript
  ExpiresByType text/css                  "access plus 1 year"
  ExpiresByType application/javascript    "access plus 1 year"
  ExpiresByType text/javascript           "access plus 1 year"

  <IfModule mod_headers.c>
    Header append Cache-Control "public"
  </IfModule>

</IfModule>

这是.htaccess下的一段配置代码,如果是在000-default文件下配置,则直接将中间的那段代码加入到
文件开头

<VirtualHost *:443> /*

ExpiresActive on
ExpiresDefault

*/ ServerAdmin webmaster@localhost ….. 关于expires的配置说明: ExpiresActive 指令:打开或关闭产生”Expires:”和”Cache-Control:”头的功能。 ExpiresByType 指令:指定MIME类型的文档(例如:text/html)的过期时间。 ExpiresDefault 指令:默认所有文档的过期时间。 过期时间的写法: “access plus 1 month” “access plus 4 weeks” “now plus 30 days” “modification plus 5 hours 3 minutes” A2592000 M604800 access、now及A 三种写法的意义相同,指过期时间从访问时开始计算。 modification及M 的意义相同,指过期时间是以被访问文件的最后修改时间开始计算。 所以,后一种写法只对静态文件起作用,而由脚本生成的动态页面不受它的作用。

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规则就是正则表达式,具体的怎么写法,等有时间再整理下。

 

开启apache的rewrite模块

Lighttpd开启伪静态跳转没啥说的,直接在配置文件里加上mod_rewrite模块就好,至于apache其实也是非常简单的,开启模块后配置文件里改几个参数就好。

首先,开启rewrite模块。

 

Command代码
  1. a2enmod rewrite

 

接着,修改配置文件,支持.htaccess,我的是默认安装的修改配置文件

 

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

查找AllowOverride参数,将None改为all

<Directory />
   Options FollowSymLinks
   AllowOverride None
</Directory>
改为
<Directory />
   Options FollowSymLinks
   AllowOverride All
</Directory>
好了,现在可以直接把rewrite规则写到.htaccess下啦。

 

 

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上加的~