從Nginx遷移回到Lighttpd以及相關配置 — High5!

banq發表於2019-03-18

我們的基礎設施中有一些執行NGINX的FreeBSD機器。在F5 最近宣佈購買NGINX之後,我們決定回到Lighttpd
我們看到很多開源專案在被收購後表現並不是那麼良好,我們認為這次收購不會對專案有利。
幾年前Lighttpd專案停滯不前,它讓我們轉向NGINX。最近幾年它再次活躍起來,我們決定退回去。
在這篇文章中,我們描述了Lighttpd配置,以涵蓋NGINX上的所有用途。

Lighttpd中的許多選項都是透過使用模組啟用的。這些是我們在所有Lighttpd伺服器上啟用的模組

server.modules = (
  "mod_auth",
  "mod_expire",
  "mod_compress",
  "mod_rewrite",
  "mod_redirect",
  "mod_alias",
  "mod_access",
  "mod_setenv",
  "mod_evhost",
  "mod_fastcgi",
  "mod_accesslog",
  "mod_openssl"
)


指定Lighttpd偵聽的IP和埠是以幾種不同的方式定義的。對於IPv4 server.port和server.bind。對於IPv6,您必須使用$ SERVER [“socket”]。SSL配置也是如此。

server.port = "80"
server.bind = "0.0.0.0"
$SERVER["socket"] == "[::]:80" { }
$SERVER["socket"] == "[::]:443" { }
$SERVER["socket"] == ":443" {
  ssl.engine = "enable"
  ssl.pemfile = "/usr/local/etc/ssl/certs/example.com/combined.pem"
  ssl.ca-file = "/usr/local/etc/ssl/certs/example.com/chain.pem"
  ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES128+EECDH:AES128+EDH"
  ssl.dh-file = "/usr/local/etc/ssl/certs/dhparam.pem"
  ssl.ec-curve = "secp384r1"
  setenv.add-response-header = ("Strict-Transport-Security" => "max-age=31536000; includeSubdomains")
}

Lighttpd需要PEM證照。您可以輕鬆建立:
# cat domain.key domain.crt > combined.pem

您可以使用以下命令建立dhparam.pem檔案:
# openssl dhparam -out dhparam.pem 4096

這些是我們在FreeBSD上使用的與伺服器設定相關的全域性設定。

server.username = "www"
server.groupname = "www"
server.pid-file = "/var/run/lighttpd.pid"
server.event-handler = "freebsd-kqueue"
server.stat-cache-engine = "disable"
server.max-write-idle = 720
server.tag = "lighttpd"
server.document-root = "/usr/local/www/default/"
server.error-handler-404 = "/404.html"
accesslog.filename = "/usr/local/www/logs/lighttpd.access.log"
server.errorlog = "/usr/local/www/logs/lighttpd.error.log"
server.dir-listing = "disable"


一些適用於Lighttpd服務的所有網站的全域性設定。

index-file.names = ("index.php", "index.html", "index.htm")
url.access-deny = ("~", ".inc", ".sh", "sql", ".htaccess")
static-file.exclude-extensions = (".php", ".pl", ".fcgi")


讓我們加密的別名。

alias.url += ("/.well-known/acme-challenge/" => "/usr/local/www/acme/")


為某些檔案型別啟用壓縮。

compress.cache-dir = "/tmp/lighttpdcompress/"
compress.filetype = ("text/plain", "text/css", "text/xml", "text/javascript")


需要身份驗證時,您可以指定如下。支援不同的後端。

auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/usr/local/etc/lighttpd/htpasswd"


某些檔案型別的常規Expire和Cache-Control標頭。

$HTTP["url"] =~ "\.(js|css|png|jpg|jpeg|gif|ico)$" {
  expire.url = ( "" => "access plus 1 months" )
}


當您執行Wordpress網站時,您可能想要拒絕訪問某些網址。

$HTTP["url"] =~ "/(?:uploads|files|wp-content|wp-includes).*\.(php|phps|txt|md|exe)$" {
  url.access-deny = ("")
}
$HTTP["url"] =~ "/(wp-config|xmlrpc)\.php$" {
  url.access-deny = ("")
}

定義需要身份驗證的主機和URL。

$HTTP["host"] =~ "www1.example.com" {
  auth.require = ( "/admin/" => (
    "method" => "basic",
    "realm" => "Restricted",
    "require" => "valid-user" )
  )
}

將某些主機從http重定向到https。

$HTTP["host"] =~ "(www\.)?example.com" {
  url.redirect = ("^/(.*)" => "https://www.example.com/$1")
}


有一個可用的模組可以幫助為虛擬主機分配正確的server.document-root。這可以使用mod_evhost完成,我們使用以下模式:

$HTTP["host"] =~ "^(www.)?[^.]+\.[^.]+$" {
  evhost.path-pattern = "/usr/local/www/www.%2.%1/"
}

為了能夠使用Wordpress的漂亮網址,您可以使用以下mod_rewrite規則。

url.rewrite = (
  "^/(.*)\.(.+)$" => "$0",
  "^/(.+)/?$" => "/index.php/$1"
)

當您使用PHP-FPM時,最後一塊拼圖可以使用以下配置。

fastcgi.server = ( ".php" =>
  ( "localhost" =>
    (
      "host" => "127.0.0.1",
      "port" => 9000
    )
  )
)


完整的配置可以在我們的Git儲存庫中找到
 

相關文章