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