Soluzione 1:
Non puoi impedire a una porta di essere vincolata dal servizio sbagliato. Nel tuo caso, rimuovi semplicemente apache dall'avvio automatico e dovresti essere a posto.
Per 16.04 e successivi:
sudo systemctl disable apache2
Per versioni precedenti di Ubuntu:
sudo update-rc.d apache2 disable
Soluzione 2:
Se davvero non stai usando apache2
, ed è PHP 7.0 che lo richiede, quindi sembra che tu abbia libapache2-mod-php7.0
installato. Quel pacchetto è inutile senza Apache. Dato che stai usando nginx, probabilmente hai anche php7.0-fpm
o php7.0-cgi
installato, uno dei quali è sufficiente per soddisfare php7.0
requisiti di dipendenza di:
$ 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>
Se hai uno dei php7.0-{fpm,cgi}
installato, puoi andare avanti e disinstallare Apache.
Soluzione 3:
Per rispondere alla tua domanda, puoi probabilmente limitare una porta a un'applicazione specifica utilizzando SElinux. Non l'ho usato personalmente e ho solo una conoscenza superficiale delle sue capacità, ma ecco un suggerimento che ho trovato in questo sito:
https://serverfault.com/a/257056/392230
In quella risposta, wzzrd sembra mostrare come concedere a un'applicazione specifica (foo) il permesso di collegarsi a una porta specifica (803). Dovresti solo impostare la politica in modo che solo la tua applicazione (nginx) abbia accesso alle porte specificate (80 e 443).
Basandomi sulla risposta di wzzrd, potrebbe essere semplice come aggiungere questo alla policy
allow nginx_t nginx_port_t:tcp_socket name_bind;
e l'esecuzione di questo
semanage port -a -t nginx_port_t -p tcp 80
semanage port -a -t nginx_port_t -p tcp 443
Tuttavia, immagino che avrai anche bisogno di una riga nella policy che specifichi che nessun altro programma può collegarsi a quelle porte.
Alla fine, sto solo indovinando quale sia la configurazione appropriata.
Ad ogni modo, non credo che ci sia stato un Ubuntu con SElinux installato e abilitato per impostazione predefinita. Poiché credo che richieda l'applicazione di determinate patch a varie utilità e un'opzione del kernel, potrebbe essere più semplice utilizzare semplicemente Centos che ha SElinux installato e abilitato fin dall'inizio.
Mi dispiace, non sono più di aiuto. Forse un'altra volta, scaricherò un'immagine di Centos e proverò questo; sarà un buon passo di apprendimento. Aggiornerò questa risposta se lo faccio.
Soluzione 4:
Qualcosa che non ho ancora visto nelle risposte, ma è ancora una possibilità:
Cambia la configurazione di Apache per ascoltare un'altra porta, per ogni evenienza. Puoi farlo aprendo il file di configurazione di Apache e modificando le righe che hanno Listen 80
a un'altra porta.