前几天我买了 linode(linode.com) 服务器。我一直试图在同一个端口上运行 lighttpd 和 apache2,使用 lighttpd 处理静态文件。由于 linode 只提供一个 ipv4 地址,我尝试将 lighttpd 绑定到 ipv6 地址。每次我都遇到同样的错误:无法绑定到端口 [ipv6] 80 地址已在使用中。我尝试绑定 ipv4 地址。一切正常。请帮帮我,这两天让我抓狂不已。
我的 lighttpd.conf 文件:(ipv6 地址不正确)
server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
# "mod_rewrite",
)
server.document-root = "/var/www"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
server.bind = "2600:3c02::0000"
server.use-ipv6 = "enable"
#server.pid-file = "/var/run/lighttpd.pid"
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
# default listening port for IPv6 falls back to the IPv4 port
#include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
### ipv6 ###
$SERVER["socket"] == "[2600:3c02::0000]:80" {
# accesslog.filename = "var/log/lighttpd/ipv6/access.log"
# server.document-root = "/var/www/"
# server.error-handler-404 = "/index.php?error=404"
}
和错误消息:无法绑定到端口,2600:3c02::0000 地址已在使用中。
答案1
您绑定[2600:3c02::0000]:80
到
server.port = 80
server.bind = "2600:3c02::0000"
和
$SERVER["socket"] == "[2600:3c02::0000]:80" {
...
}
这意味着您将两次绑定到同一个地址。移除$SERVER["socket"]
阻止后您就没问题了。
(编辑:这样你就得到了你想要的东西;但我怀疑你的“设置”总体上是不是一个好主意;正如 Halfgaar 指出的那样,一个网络服务器必须代理到另一个网络服务器;通常,提供静态文件的服务器应该是公开可见的,代理到另一个隐藏的服务器)
答案2
如果您希望通过 lightttpd/nginx 提供静态文件,并通过 apache 提供动态文件,则必须在端口 80(如果是 SSL,则为 443)上运行 lightttpd/nginx,并在其他端口上运行 apache。然后,您将 lightttpd/nginx 配置为代理,以将所有非静态内容转发到备用端口上的 apache。有很多示例可供查找。