Hay dos formas de lograr esto. O haces todo por dirección IP, con ubicaciones de subcarpetas, o necesitarás comprar un dominio y luego tener múltiples subdominios en ese dominio (los subdominios no deberían costar nada, si compras el dominio, pero consulta con tu registrador).
No aconsejo el método de la dirección IP solo porque es muy malo tener que recordar las direcciones IP, y si intentas compartir información con otros, también tienes el mismo problema de que otros tengan que recordar la dirección IP.
El enfoque de una sola IP, muchas subcarpetas, sin un nombre de dominio
¡DARSE CUENTA! No tenemos ninguna información sobre sus proyectos en los que está trabajando. Necesitamos saber más para determinar si puede hacer este enfoque, ya que muchos marcos web no funcionarán sin un verdadero nombre de dominio vinculado a él.
ADVERTENCIA : En las pruebas en curso de estos ejemplos, se descubrió que el enfoque "Un dominio, muchos subdirectorios" no toma amablemente revertir los datos de proxy al backend, ya que el URI solicitado incluirá los subdirectorios dentro del URI; Esto podría hacer que los servidores de back-end tengan problemas para comportarse correctamente.
Por nginx
otro lado, tenemos que hacer un enfoque 'malvado' para esto: una dirección IP, muchas docroots y ubicaciones de subcarpetas. Este es un enfoque muy muy malo y puede causar muchos problemas con algunos marcos web.
Suponiendo una nginx
instalación predeterminada como base de los repositorios, entonces tenemos que crear una configuración de sitio para manejar cada solicitud de subdirectorio del proyecto. Luego tenemos que vincularlo en la ubicación correcta.
Cree /etc/nginx/sites-available/my-projects
con lo siguiente (use esto como una plantilla / guía: asume tres proyectos con HTML estático y sin aplicaciones web dinámicas en PHP o python o similares, y puede copiar los bloques de ubicación individuales y crear nuevas ubicaciones en consecuencia; también asume su IP del servidor es 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
}
}
Ahora reemplazamos la configuración predeterminada (elimínela) y agregamos la nuestra:
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled
Y luego reinicie el nginx
servicio:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
El enfoque de un dominio y subdominios múltiples.
Esta sección de respuestas asume que tiene un dominio y múltiples subdominios. Si no tiene esto, aclare esto en su pregunta
Con cada nginx
server {}
bloque en la configuración, necesitará definir el nombre del servidor y, probablemente, establecer un cuarto bloque de servidor como "capturar todo" para otras solicitudes.
Ejemplo: Tengo tres proyectos, proj1
, proj2
, proj3
. Tengo un dominio llamado evil-projects.net
(NOTA: Realmente no existe). Quiero tres subdominios diferentes, uno para cada nginx
configuración que apuntará a un proyecto cada uno. Mi servidor reside en 1.2.3.4 y servirá a todos los sitios.
Con el escenario anterior, tenemos dos partes: dominios y subdominios, y la configuración del servidor.
(1): Configuración DNS
Configure su DNS en su host de manera que lo siguiente sea cierto con los registros 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): configuración de NGINX en el servidor (1.2.3.4)
Ahora para sus nginx
configuraciones. Supongo que tendrá las configuraciones predeterminadas de nginx y los paquetes de los repositorios (voy a usar 14.04 como ejemplo base). /etc/nginx/sites-available
Primero tendremos cuatro archivos de configuración . Es posible que deba usarlo sudo
al crear estos archivos, ya que la carpeta en cuestión es propiedad de root
.
/etc/nginx/sites-available/catch-all
- Este será el 'catch all' para cualquier dominio no válido. Me gusta devolver el código de error http 410 (GONE).
server {
listen 80 default_server;
server_name _;
return 410;
}
A continuación, configuramos la configuración para sus sitios / proyectos. Sin embargo, voy a suponer que todos son archivos estáticos. Cada uno de estos implica que también tiene diferentes directorios web para cada proyecto en el servidor (diferentes 'raíces de documentos').
/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;
}
}
Luego tenemos que eliminar la configuración 'predeterminada' /etc/nginx/sites-enabled
y agregar la nuestra. De nuevo, sudo
se necesita aquí.
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/
Y luego reiniciamos el nginx
proceso:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.04 or newer, use this:
sudo systemctl restart nginx
Una vez que el DNS se propaga, los sitios funcionarán como deberían.
X.Y.Z.W/foo
,X.Y.Z.W/bar
)? ¿Por qué no puedes obtener dominios para ellos? (¿Puede asignar la misma IP a múltiples dominios)?