程式狂想筆記

一個攻城師奮鬥史

0%

更新系統apache壞掉,從零開始設定

由於更新系統
apache也更著升到2.4
查一些資料,有些升級設定檔不太一樣
所以我沒有選擇保留設定檔

#設定htaccess

首先,我發現我的htaccess沒有生效
太久設定的東西,大概忘了一半XD

1
2
3
<Directory "/var/www">
AllowOverride All
</Directory>

這個設定完還不夠安全
http://xxxxx.com/.htaccess可以看到裡面資訊

我還發現我有設定

1
2
3
4
5
6
7
8
9
10
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy all
EnableSendfile Off
</Files>
<Files ~ ".part$">
order allow,deny
deny from all
</Files>

更換成
1
2
3
4
5
6
7
8
<Files ~ "^\.ht">
Require all denied
Satisfy all
EnableSendfile Off
</Files>
<Files ~ ".part$">
Require all denied
</Files>

想說我之前有寫過autoindex筆記
後來發現裡面沒有記很多東西
今天來補一補吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Files ~ ".part$">
order allow,deny
deny from all
Satisfy All
</Files>
Order deny,allow
Deny from all
AuthName "Please type password"
AuthType Basic
AuthUserFile "----你看不到----/.htpasswd"
require valid-user
IndexHeadInsert "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><link rel=\"shortcut icon\" type=\"image/png\" href=\"/include/favicon.ico\"/>"
IndexStyleSheet "/include/autoindex.css"
Allow from 192.168.1.0/24
Satisfy Any

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Usage:
htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password

htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
-c 创建一个新的加密密码文件
-n 不更新文件,显示结果
-m 使用MD5加密密码
-d 使用CRYPT加密密码(默认)
-p 不加密密码
-s 使用SHA加密密码
-b 直接在命令行输入密码,而不是提示后再输入密码
-D 删除用户
在Windows, NetWare与 TPF系统,'-m' 是默认的密码加密方式。
在所有其他系统,'-p'可能不能使用。


設定帳號密碼
htpasswd -c .htpasswd username

使用apache htpasswd生成加密的密码文件,并使用.htaccess控制目录访问 - 傲雪星枫 - CSDN博客

我真的忘記^.ht是不是我設定的
裡面來有一些設定說明

之前在 VirtualBox 的 Shared Folder 進行開發,在寫 PHP 的時候都沒問題, 但是只要碰到靜態檔案,例如 Js 檔,明明修改了,看到的還是舊的版本。
這時候只要重開 Apache 就好了,但是每次這樣重開也不是辦法,於是 Google 一下是哪裡出了問題。 發現是 Apache 的 sendfile 在做怪,這是一個利用 Kernel 的 sendfile 來加速靜態檔案發送的功能。

VirtualBox Apache Sendfile - 蟑螂窩

最早接觸Satisfy,是這樣一個情況,一個目錄啟用了密碼保護,想單獨開放它的一個子目錄,讓這個子目錄無須密碼即可訪問

Apache的Satisfy详解 – Fwolf’s Blog

更多參考:

鳥哥的 Linux 私房菜 – WWW 伺服器 Apache
存取限制

#設定https
由於之前用certbot設定過了
只要加設定就可以了

###舊設定

1
2
3
4
5
6
7
8
9
10
ServerAdmin service@<<不讓你看>>
DocumentRoot /var/www/
ServerName <<不讓你看>>
ServerAlias <<不讓你看>>

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/<<不讓你看>>/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<<不讓你看>>/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/<<不讓你看>>/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/<<不讓你看>>/fullchain.pem

發現好像可以不用設定上面一些Name
直接照上面網址設定

新設定

1
2
3
4
5
 SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/<<不讓你看>>/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<<不讓你看>>/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/<<不讓你看>>/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/<<不讓你看>>/fullchain.pem

#設定http2
然後參照[網站] 網域搬新家、升級 HTTPS 與 HTTP/2(長篇大論版) – Digiologist設定https
發生悲劇
怎麼會沒有http2 mod
後來發現要apache2.4.7才有,apache 2.4.1沒有
系統繼續升級到stretch,就能更新到2.4.7
照上面執行就能順利完成

簡單記錄設定

1
2
$ sudo a2enmod http2
$ sudo service apache2 restart

/etc/apache2/sites-enabled/000-default.conf 裡VirtualHost加入:
1
Protocols h2 http/1.1

/etc/apache2/sites-enabled/default-ssl.conf 裡VirtualHost加入:
1
Protocols h2 h2c http/1.1

重啟apache就能正常,可以瀏覽器開放著工具是不是http2
1
$ sudo service apache2 reload

剩下就是http導https頁面
今天剛好看到用.htaccess自動導向https – I’m a Taiwan based UIUX designer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
RewriteEngine On
// 開啟rewrite這個功能模組

RewriteCond %{SERVER_PORT} 80
// RewriteCond:rewrite condition 重寫條件,
// %則是變數的意思,也就是{SERVER_PORT} 80是重寫的條件(變數)。
// 整句意思是:所有由port 80的連線為…(接續下行)

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
// RewriteRule:重寫規則為…,
// ^(.*)$:任意字元,
// %{HTTP_HOST}%{REQUEST_URI}:訪問的主域名與相對位址,
// [L,R=301]:L為last,最後一條規則,
// R=301則是http協議中的狀態碼,意為永久改變位置。
// 整句意思是:永久重寫所有連線為https的網址

htaccess 常用命令 - 小小工程師的日常筆記 -

因為我還有特殊需
還需要設定autoindex照日期排序

1
2
3
4
5
<IfModule mod_autoindex.c>
...
IndexOrderDefault Descending Date
...
</IfModule>

這次經驗覺得設定檔還是要寫一下注解
不然放置很久,都不知道是不是自己加的XD

解決問題 SSL/TLS (2) | Leo Yeh’s Blog
使用a2ensite和a2dissite来快速切换站点 - CSDN博客
風和日麗 天氣晴: Apache 的 .htaccess 失效?
htaccess 常用命令 - 小小工程師的日常筆記 -