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-dataEs 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_ensiteynginx_dissite. Para los usuarios de httpd de Apache que encuentran esto con una búsqueda, los equivalentes sona2ensite/a2dissite.La
sites-availablecarpeta es para almacenar todas las configuraciones de vhost, estén o no habilitadas actualmente.La
sites-enabledcarpeta contiene enlaces simbólicos a archivos en la carpeta de sitios disponibles. Esto le permite desactivar selectivamente vhosts eliminando el enlace simbólico.conf.dhace 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-enabledes 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.confsin 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-enabledha 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-enabledcarpeta se usa para definiciones de host virtual, mientras queconf.dse 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-enabledy quitando archivos (o creando y eliminando enlaces simbólicos, lo que probablemente sea una mejor idea)Úselo
conf.dpara 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-datausuario 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
rooty 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-enabledló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
includedirectiva estándar en/etc/nginx/nginx.conf.Aquí hay un fragmento de
/etc/nginx/nginx.confun paquete oficial de nginx de nginx.org:Aquí hay un fragmento de
/etc/nginx/nginx.confDebian / Ubuntu :Por lo tanto, desde el punto de vista de NGINX, la única diferencia sería que los archivos
conf.dse procesarán antes y, por lo tanto, si tiene configuraciones que entran en conflicto silenciosamente entre sí, entonces las deconf.dpueden 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
.confsufijo, 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-availableysites-enableda toda costa.No veo absolutamente ninguna razón para usar
sites-available/sites-enabled:Algunas personas han mencionado
nginx_ensiteynginx_dissitescripts, 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 delnginxpaquete 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-availableasites-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
includedirectiva 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-enabledyemacscreas un archivo de respaldo comodefault~, de repente, tienes ambosdefaultedefault~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-enabledes puro mal!fuente
sites-enabledera 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-availableysites-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.USR1que 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.