У меня есть экземпляр nginx, работающий на портах 80 и 443, и я хотел бы использовать openvpn с портом 443 в совместном использовании.
Итак, в моем 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)
Я не понимаю, почему не работает функция совместного использования портов.
В /etc/nginx/conf.d/ должен быть какой-то файл .conf, привязанный к порту 443. Это приводит к ошибке невозможности привязки (только одно приложение может привязаться к порту за раз, по крайней мере, для каждого адреса прослушивания) .
Вы пишете, что у вас «nginx работает на портах 80 и 443» - я полагаю, вы определили это в папке conf.d. Просто измените директиву listen с 443 на 4433, и она должна работать.
Вы неправильно прочитали документацию. Два демона не могут использовать одну привязку.
В конфигурации nginx вы должны определить следующее:
listen 127.0.0.1:4433 ssl;
Хотя мой совет - избегайте OpenVPN и особенно избегайте совместного использования портов в OpenVPN. С помощью port-sharing
паразитирует на надежности вашего веб-сервера и вашего сервиса OpenVPN. Кроме того, вы полагаетесь на людей, которые недостаточно опытны в веб-серверах и HTTP, а это приведет к еще большим проблемам.