Solución 1:
No puede evitar que un puerto esté vinculado por el servicio incorrecto. En su caso, simplemente elimine apache del inicio automático y debería estar bien.
Para 16.04 y posteriores:
sudo systemctl disable apache2
Para versiones anteriores de Ubuntu:
sudo update-rc.d apache2 disable
Solución 2:
Si realmente no estás usando apache2
, y es PHP 7.0 el que lo requiere, entonces parece que tiene libapache2-mod-php7.0
instalado. Ese paquete es inútil sin Apache. Dado que está utilizando nginx, es probable que también tenga php7.0-fpm
o php7.0-cgi
instalado, cualquiera de los cuales es suficiente para satisfacer php7.0
requisitos de dependencia:
$ apt-cache depends php7.0
php7.0
|Depends: php7.0-fpm
|Depends: libapache2-mod-php7.0
Depends: php7.0-cgi
Depends: php7.0-common
Conflicts: <php5>
Si tiene cualquiera de php7.0-{fpm,cgi}
instalado, puede continuar y desinstalar Apache.
Solución 3:
Para responder a su pregunta, probablemente pueda restringir un puerto a una aplicación específica usando SElinux. No lo he usado yo mismo y solo tengo un conocimiento superficial de sus capacidades, pero aquí hay un indicador que encontré en este sitio:
https://serverfault.com/a/257056/392230
En esa respuesta, wzzrd parece mostrar cómo otorgar permiso a una aplicación específica (foo) para vincularse a un puerto específico (803). Solo tendría que configurar la política para que solo su aplicación (nginx) pueda acceder a los puertos que especifique (80 y 443).
Basándome en la respuesta de wzzrd, podría ser tan simple como agregar esto a la política
allow nginx_t nginx_port_t:tcp_socket name_bind;
y ejecutando esto
semanage port -a -t nginx_port_t -p tcp 80
semanage port -a -t nginx_port_t -p tcp 443
Sin embargo, me imagino que también necesitará una línea en la política que especifique que ningún otro programa puede vincularse a esos puertos.
Al final, solo estoy adivinando cuál es la configuración adecuada.
De todos modos, no creo que haya habido un Ubuntu que tenga SElinux instalado y habilitado por defecto. Debido a que creo que requiere aplicar ciertos parches a varias utilidades y una opción de kernel, podría ser más fácil simplemente usar Centos, que tiene SElinux instalado y habilitado desde el primer momento.
Lo siento, no soy de más ayuda. Tal vez en otro momento, descargue una imagen de Centos y pruebe esto; será un buen paso de aprendizaje. Actualizaré esta respuesta si lo hago.
Solución 4:
Algo que aún no he visto en las respuestas, pero que sigue siendo una posibilidad:
Cambie la configuración de Apache para escuchar otro puerto, por si acaso. Puede hacerlo abriendo el archivo de configuración de Apache y cambiando las líneas que tienen Listen 80
a otro puerto.