Il y a deux façons d'y parvenir. Soit vous faites tout par adresse IP, avec l'emplacement des sous-dossiers, soit vous devrez acheter un domaine puis avoir plusieurs sous-domaines sur ce domaine (les sous-domaines ne devraient rien coûter, si vous achetez le domaine, mais vérifiez auprès de votre registraire).
Je ne conseille pas la méthode de l'adresse IP, ne serait-ce que parce que c'est très mal de devoir se souvenir des adresses IP, et si vous essayez de partager des informations avec d'autres, vous avez également le même problème que les autres doivent se souvenir de l'adresse IP.
L'approche one-IP, plusieurs sous-dossiers, sans nom de domaine
REMARQUER! Nous n'avons aucune information sur vos projets sur lesquels vous travaillez. Nous devons en savoir plus pour déterminer si vous pouvez faire cette approche, car de nombreux frameworks Web ne fonctionneront pas sans un vrai nom de domaine lié.
AVERTISSEMENT : lors des tests en cours de ces exemples, il a été découvert que l'approche «Un domaine, plusieurs sous-répertoires» ne prend pas la gentillesse de la rétro-procuration des données vers le backend, car l'URI demandé inclura les sous-répertoires dans l'URI; cela peut entraîner des problèmes de comportement des serveurs principaux.
Sur le nginx
côté, nous devons faire une approche «diabolique» à ce sujet - une adresse IP, de nombreux docroots et emplacements de sous-dossiers. C'est une approche très très mauvaise et peut causer beaucoup de problèmes avec certains frameworks web.
En supposant une nginx
installation par défaut en tant que base à partir des référentiels, nous devons ensuite créer une configuration de site pour gérer chaque demande de sous-répertoire de projet. Ensuite, nous devons le lier symboliquement au bon endroit.
Créez /etc/nginx/sites-available/my-projects
avec ce qui suit (utilisez-le comme modèle / guide - il suppose trois projets avec HTML statique et aucune application Web dynamique en PHP ou python ou similaire, et vous pouvez copier les blocs d'emplacement individuels et créer de nouveaux emplacements en conséquence; il suppose également que votre IP du serveur est 1.2.3.4
).
server {
listen 80 default_server;
server_name 1.2.3.4;
location / {
return 410; # Default root of site won't exist.
}
location /proj1/ {
alias /var/www/proj1;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj2/ {
alias /var/www/proj2;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj3/ {
alias /var/www/proj3;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
}
Maintenant, nous remplaçons la configuration par défaut (supprimez-la) et ajoutons la nôtre:
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled
Et puis redémarrez le nginx
service:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
L'approche à un seul domaine et à plusieurs sous-domaines.
Cette section de réponse suppose que vous avez un domaine et plusieurs sous-domaines. Si vous ne l'avez pas, veuillez clarifier cela dans votre question
Avec chaque nginx
server {}
bloc dans la configuration, vous devrez définir le nom du serveur et probablement définir un quatrième bloc de serveur comme «tout attraper» pour les autres demandes.
Exemple: J'ai trois projets, proj1
, proj2
, proj3
. J'ai un domaine appelé evil-projects.net
(REMARQUE: n'existe pas vraiment). Je veux trois sous-domaines différents, un pour chaque nginx
configuration qui pointera vers un projet chacun. Mon serveur réside à 1.2.3.4, et il servira tous les sites.
Avec le scénario ci-dessus, nous avons deux parties: les domaines et sous-domaines et la configuration du serveur.
(1): Configuration DNS
Configurez votre DNS sur votre hôte de sorte que ce qui suit soit vrai avec les enregistrements DNS:
evil-projects.net IN A 1.2.3.4
proj1.evil-projects.net IN A 1.2.3.4
proj2.evil-projects.net IN A 1.2.3.4
proj3.evil-projects.net IN A 1.2.3.4
(2): configuration NGINX sur le serveur (1.2.3.4)
Maintenant pour vos nginx
configurations. Je suppose que vous allez avoir les configurations par défaut de nginx et les packages des référentiels (je vais utiliser 14.04 comme exemple de base). Nous aurons d'abord quatre fichiers de configuration /etc/nginx/sites-available
. Vous devrez peut-être utiliser sudo
lors de la création de ces fichiers, car le dossier en question appartient à root
.
/etc/nginx/sites-available/catch-all
- ce sera le «catch all» pour tous les domaines non valides. J'aime retourner le code d'erreur http 410 (GONE).
server {
listen 80 default_server;
server_name _;
return 410;
}
Ensuite, nous configurons la configuration de vos sites / projets. Je suppose que ce sont tous des fichiers statiques, cependant. Chacun de ces éléments implique que vous disposez également de différents répertoires Web pour chaque projet sur le serveur (différentes «racines de document»).
/etc/nginx/sites-available/proj1.evil-projects.net
:
server {
listen 80;
server_name proj1.evil-projects.net;
root /var/www/proj1;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj2.evil-projects.net
:
server {
listen 80;
server_name proj2.evil-projects.net;
root /var/www/proj2;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj3.evil-projects.net
:
server {
listen 80;
server_name proj3.evil-projects.net;
root /var/www/proj3;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
Nous devons ensuite supprimer la configuration «par défaut» /etc/nginx/sites-enabled
et ajouter la nôtre. Encore une fois, sudo
est nécessaire ici.
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/proj1.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj2.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj3.evil-projects.net /etc/nginx/sites-enabled/
Et puis nous redémarrons le nginx
processus:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.04 or newer, use this:
sudo systemctl restart nginx
Une fois le DNS propagé, les sites fonctionneront comme ils le devraient.
X.Y.Z.W/foo
,X.Y.Z.W/bar
)? Pourquoi ne pouvez-vous pas obtenir de domaines pour eux? (Vous pouvez attribuer la même IP à plusieurs domaines)?