Tengo algo de experiencia usando Linux pero ninguno usando nginx. Me encargaron investigar las opciones de equilibrio de carga para un servidor de aplicaciones.
He usado apt-get para instalar nginx y todo parece estar bien.
Tengo un par de preguntas.
¿Cuál es la diferencia entre la carpeta de sitios disponibles y la carpeta conf.d? Ambas carpetas estaban INCLUIDAS en la configuración de configuración predeterminada para nginx. Los tutoriales usan ambos. ¿Para qué son y cuál es la mejor práctica?
¿Para qué se utiliza la carpeta habilitada para sitios? ¿Como lo uso?
La configuración predeterminada hace referencia a un usuario de www-data? ¿Tengo que crear ese usuario? ¿Cómo le doy a ese usuario permisos óptimos para ejecutar nginx?
linux
ubuntu
nginx
web-server
configuration
Seth Spearman
fuente
fuente
www-data
Es un tema aparte. La mayoría de los sistemas operativos definen un usuario separado con permisos más bajos que el proceso puede ejecutar después de vincularse al puerto 80 como root. Está definido en el archivo de configuración. Aplicar prácticas básicas de seguridad desde allí; no permita que el usuario escriba en nada en lo que el servidor web no deba escribir, no permita que otros usuarios escriban en los archivos a menos que sea deliberado.Respuestas:
Las carpetas sites- * son administradas por
nginx_ensite
ynginx_dissite
. Para los usuarios de httpd de Apache que encuentran esto con una búsqueda, los equivalentes sona2ensite
/a2dissite
.La
sites-available
carpeta es para almacenar todas las configuraciones de vhost, estén o no habilitadas actualmente.La
sites-enabled
carpeta contiene enlaces simbólicos a archivos en la carpeta de sitios disponibles. Esto le permite desactivar selectivamente vhosts eliminando el enlace simbólico.conf.d
hace el trabajo, pero debe mover algo fuera de la carpeta, eliminarlo o hacer cambios cuando necesite deshabilitar algo. La abstracción de la carpeta sites- * hace que las cosas estén un poco más organizadas y le permite administrarlas con scripts de soporte independientes.(a menos que sea como yo, y uno de los muchos administradores de Debian que solo administraron los enlaces simbólicos directamente, sin saber sobre los scripts ...)
fuente
sites-available|sites-enabled
es un Debian-ism y no es algo que hacen nginx o Apache. Probablemente fue bastante útil en el pasado, pero su utilidad es algo limitada en una era de administración de configuración y contenedores.nginx.conf
sin pérdida de legibilidad. Esto es opuesto al enfoque de hace unos años cuando los servidores normalmente almacenaban decenas de sitios web.Me gustaría agregar a las respuestas anteriores que lo más importante no es cómo llamar a los directorios (aunque es una convención muy útil), sino lo que realmente pones
nginx.conf
. Configuración de ejemplo:La única directiva utilizada aquí es include , por lo que no hay diferencia interna entre eg
conf.d/
ysites-enabled/
.De la documentación anterior:
Entonces, para responder a la pregunta original: no existe una diferencia interna, y puede usarlas de la mejor manera posible, recordando los consejos de las otras respuestas. Y, por favor, no olvides elegir la respuesta "correcta".
fuente
sites-enabled
ha sido inventado de alguna manera por alguna distribución, confundiéndose como lo hace un molesto intermediario. Vaya a buscar nginx de la fuente oficial : obtendrá un producto actualizado, así como deshacerse de esta basura de la configuración / infierno.Normalmente, la
sites-enabled
carpeta se usa para definiciones de host virtual, mientras queconf.d
se usa para la configuración global del servidor. Si admite varios sitios web, es decir, hosts virtuales, cada uno obtiene su propio archivo, por lo que puede habilitarlos y deshabilitarlos muy fácilmente moviendosites-enabled
y quitando archivos (o creando y eliminando enlaces simbólicos, lo que probablemente sea una mejor idea)Úselo
conf.d
para cosas como la carga de módulos, archivos de registro y otras cosas que no son específicas de un solo host virtual.Debería tener nginx ejecutándose como usuario no root. En algunos casos
www-data
, se llama así , pero puede nombrarlo como desee.Estoy menos seguro de la respuesta a esta pregunta (no estoy ejecutando nginx en este momento), pero si se parece a Apache, la respuesta es que el
www-data
usuario solo necesita permisos de lectura para cualquier archivo estático (y leer + ejecutar en directorios ) que está publicando, o lee / ejecuta permisos en cosas como scripts CGI, y no tiene permisos en ningún otro lugar.fuente
root
y hay un compromiso remoto de algún tipo, el atacante inmediatamente tiene acceso completo al sistema. Cuando se ejecuta como un usuario sin privilegios, el acceso administrativo solo estará disponible en combinación con algún tipo de explotación local.¿Que esta pasando?
Debe estar utilizando Debian o Ubuntu, ya que el mal
sites-available
/sites-enabled
lógica no es utilizado por el paquete ascendente de nginx de http://nginx.org/packages/ .En cualquier caso, ambos se implementan como una convención de configuración con la ayuda de la
include
directiva estándar en/etc/nginx/nginx.conf
.Aquí hay un fragmento de
/etc/nginx/nginx.conf
un paquete oficial de nginx de nginx.org:Aquí hay un fragmento de
/etc/nginx/nginx.conf
Debian / Ubuntu :Por lo tanto, desde el punto de vista de NGINX, la única diferencia sería que los archivos
conf.d
se procesarán antes y, por lo tanto, si tiene configuraciones que entran en conflicto silenciosamente entre sí, entonces las deconf.d
pueden tener prioridad sobre las que se encuentransites-enabled
.La mejor práctica es
conf.d
.Debería usarlo
/etc/nginx/conf.d
, ya que es una convención estándar, y debería funcionar en cualquier lugar.Si necesita deshabilitar un sitio, simplemente cambie el nombre del nombre del archivo para que ya no tenga un
.conf
sufijo, es muy fácil, directo y a prueba de errores:sudo mv -i /etc/nginx/conf.d/default.conf{,.off}
O lo contrario para habilitar un sitio:
sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}
Evitar
sites-available
ysites-enabled
a toda costa.No veo absolutamente ninguna razón para usar
sites-available
/sites-enabled
:Algunas personas han mencionado
nginx_ensite
ynginx_dissite
scripts, los nombres de estos scripts son incluso peores que el resto de esta debacle, pero estos scripts tampoco se encuentran en ninguna parte, están ausentes delnginx
paquete incluso en Debian (y probablemente también en Ubuntu) , y no presente en un paquete propio, además, ¿realmente necesita un script de terceros no estándar completo para simplemente mover y / o vincular los archivos entre los dos directorios?Y si no está utilizando los scripts (que, de hecho, es una opción inteligente según lo anterior), entonces surge el problema de cómo administra los sitios:
sites-available
asites-enabled
?sites-enabled
?Lo anterior puede parecer algunos problemas menores que abordar, hasta que varias personas comiencen a administrar el sistema, o hasta que tome una decisión rápida, solo para olvidarse de eso meses o años más adelante ...
Lo que nos lleva a:
¿Es seguro eliminar un archivo
sites-enabled
? ¿Es un enlace suave? Un enlace duro? ¿O la única copia de la configuración? Un excelente ejemplo de infierno de configuración.¿Qué sitios han sido deshabilitados? (Con
conf.d
, simplemente haga una búsqueda de inversión de archivos que no terminen con.conf
-find /etc/nginx/conf.d -not -name "*.conf"
, o usegrep -v
).No solo todo lo anterior, sino que también tenga en cuenta la
include
directiva específica utilizada por Debian / Ubuntu/etc/nginx/sites-enabled/*
: no se especifica ningún sufijo de nombre de archivosites-enabled
, a diferencia deconf.d
./etc/nginx/sites-enabled
yemacs
creas un archivo de respaldo comodefault~
, de repente, tienes ambosdefault
edefault~
incluidos como configuración activa, lo que, dependiendo de las directivas utilizadas, puede que ni siquiera te dé le avisa y provoca una sesión de depuración prolongada. (Sí, me pasó a mí; fue durante un hackathon, y estaba totalmente desconcertado de por qué mi conf no estaba funcionando).Por lo tanto, estoy convencido de que
sites-enabled
es puro mal!fuente
sites-enabled
era lo suficientemente malvado!sites-enabled
, y luego otra persona decida deshabilitarlo eliminándolo, posiblemente pensando que era solo un enlace simbólico, que requiere un volcado de memoria posterior de nginx heap para recuperar el archivo conf: stackoverflow.com/q/45852224/1122270sites-available
ysites-enabled
; es importante poder preparar archivos de configuración fuera del directorio de recolección 'en vivo' de tal manera que si nginx fuera recargado o reiniciado, no recogería archivos de configuración parciales. También puede ser útil mantener archivos de configuración que ya no están en uso activo. Crear enlaces simbólicos no es una tarea particularmente difícil si tienes la experiencia suficiente para administrar nginx en primer lugar, IMO.USR1
que vuelve a abrir registros, no vuelve a cargar conf.) Encuentro que sus comentarios de "experiencia" de enlace simbólico están mal dirigidos: el problema es una cuestión de coherencia, que tiene poco que ver con la experiencia.