Solution 1 :
Vous ne pouvez pas empêcher un port d'être lié par le mauvais service. Dans votre cas, supprimez simplement apache du démarrage automatique et tout devrait bien se passer.
Pour 16.04 et versions ultérieures :
sudo systemctl disable apache2
Pour les anciennes versions d'Ubuntu :
sudo update-rc.d apache2 disable
Solution 2 :
Si vous n'utilisez vraiment pas apache2
, et c'est PHP 7.0 qui l'exige, alors il semble que vous ayez libapache2-mod-php7.0
installée. Ce paquet est inutile sans Apache. Puisque vous utilisez nginx, vous avez probablement aussi php7.0-fpm
ou php7.0-cgi
installé, l'un ou l'autre étant suffisant pour satisfaire php7.0
Exigences de dépendance :
$ 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 vous avez l'un des php7.0-{fpm,cgi}
installé, vous pouvez continuer et désinstaller Apache.
Solution 3 :
Pour répondre à votre question, vous pouvez probablement restreindre un port à une application spécifique en utilisant SElinux. Je ne l'ai pas utilisé moi-même et n'ai qu'une connaissance superficielle de ses capacités, mais voici un pointeur que j'ai trouvé sur ce site :
https://serverfault.com/a/257056/392230
Dans cette réponse, wzzrd semble montrer comment donner à une application spécifique (foo) l'autorisation de se lier à un port spécifique (803). Il vous suffirait de configurer la politique de sorte que seule votre application (nginx) soit autorisée aux ports que vous spécifiez (80 et 443).
En me basant sur la réponse de wzzrd, cela pourrait être aussi simple que d'ajouter ceci à la politique
allow nginx_t nginx_port_t:tcp_socket name_bind;
et en cours d'exécution
semanage port -a -t nginx_port_t -p tcp 80
semanage port -a -t nginx_port_t -p tcp 443
Cependant, j'imagine que vous aurez également besoin d'une ligne dans la stratégie qui spécifie qu'aucun autre programme ne peut se lier à ces ports.
En fin de compte, je ne fais que deviner quelle est la configuration appropriée.
Quoi qu'il en soit, je ne pense pas qu'il y ait eu un Ubuntu sur lequel SElinux est installé et activé par défaut. Parce que je pense que cela nécessite d'appliquer certains correctifs à divers utilitaires et une option de noyau, il pourrait être plus facile d'utiliser simplement Centos qui a SElinux installé et activé dès le départ.
Désolé, je ne suis pas d'une plus grande aide. Peut-être qu'une autre fois, je téléchargerai une image de Centos et j'essaierai ceci; ce sera une bonne étape d'apprentissage. Je mettrai à jour cette réponse si je le fais.
Solution 4 :
Quelque chose que je n'ai pas encore vu dans les réponses, mais qui reste une possibilité :
Modifiez la configuration d'Apache pour écouter un autre port, juste au cas où. Vous pouvez le faire en ouvrant le fichier de configuration Apache et en modifiant les lignes qui ont Listen 80
vers un autre port.