我们的基础设施中有一些运行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存储库中找到