我有一个在端口 80 和 443 上运行的 nginx 实例,我想在共享中使用端口 443 的 openvpn。
所以在我的 server.conf 中我有这个
port 443
port-share 127.0.0.1 4433
proto tcp
;proto udp
在我的 nginx.conf 中
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 2M;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
# OpenVPN
server {
listen 4433;
}
}
但是当我第一次启动 nginx 守护进程时,openvpn 服务无法启动并出现错误:
Mon Jan 18 13:36:19 2016 us=761548 TCP/UDP: Socket bind failed on local address [undef]: Address already in use
如果我先启动 openvpn,nginx 将返回:
[emerg] 5301#0: bind() to 0.0.0.0:443 failed (98: Address already in use)
我不明白为什么端口共享功能不起作用。
答案1
/etc/nginx/conf.d/ 中必须有一些 .conf 文件,绑定在端口 443 上。这会导致无法绑定错误(每个监听地址一次只能绑定一个应用程序到一个端口,至少)。
您写道,您有“nginx 在端口 80 和 443 上运行” - 我想您在 conf.d 文件夹中定义了这一点。只需将 listen 指令从 443 更改为 4433,它就可以工作了。
答案2
您没有仔细阅读文档。两个守护进程不能共享一个绑定。
在您的 nginx 配置中您应该定义以下内容:
listen 127.0.0.1:4433 ssl;
尽管我的建议是避免使用 OpenVPN,尤其是避免在 OpenVPN 中使用端口共享。使用 OpenVPNport-sharing
会对您的 Web 服务器和 OpenVPN 服务的可靠性产生寄生影响。此外,您依赖的是在 Web 服务器和 HTTP 方面经验不足的人,这会导致更多问题。