Resumen del modelo de E / S del sistema Linux, instalación y configuración básica de la compilación Nginx

Resumen del modelo de E / S del sistema Linux, instalación y configuración básica de la compilación Nginx

1. Modelo de E / S del sistema Linux

1. El concepto de IO

Todo en el mundo de Linux es un archivo, sockets, tuberías, terminales, etc. son todos archivos. Los archivos en el sistema Linux también pueden entenderse como una serie de flujos binarios. En el proceso de intercambio de información, las operaciones de envío y recepción de estos flujos binarios son operaciones de E / S (entrada y salida), las más comunes de las cuales son E / S de disco y E / S de red.

2. Espacio de kernel y espacio de usuario

El sistema Linux divide el espacio de memoria en dos partes: espacio del núcleo y espacio del usuario. El código y los datos del kernel se almacenan en el espacio del kernel, que puede ejecutar instrucciones privilegiadas y proporcionar interfaces de servicios externos, como el acceso al hardware. Lo que se almacena en el espacio de usuario es el código y los datos del programa de usuario, y solo se pueden ejecutar instrucciones sin privilegios.

Toda la gestión de recursos del sistema se realiza en el espacio del kernel, como leer y escribir archivos de disco, leer y escribir datos desde la interfaz de red, etc. El programa de aplicación del usuario no puede realizar directamente tales operaciones y solo puede completar dichas tareas a través de la interfaz proporcionada por el kernel.

4. Modelo de E / S del sistema

Tome el programa de usuario para leer datos como ejemplo para comprender el modelo de E / S del sistema. Dado que el usuario no tiene la autoridad para acceder directamente al dispositivo de disco, solo se puede lograr a través del kernel. Cuando el kernel lee los datos requeridos por el usuario desde el disco, está restringido por el estricto aislamiento entre el espacio del kernel y el espacio del usuario, y es necesario copiar los datos de la memoria en el espacio del kernel a la memoria de proceso del espacio del usuario. Entonces, en términos simples, una E / S es el proceso completo en el que el kernel lee datos del disco al espacio del kernel y luego copia los datos de la memoria en el espacio del kernel a la memoria del proceso en el espacio del usuario. System IO tiene cuatro modelos: síncrono, asíncrono, con bloqueo y sin bloqueo.

  • Sincrónico Asincrónico

    La atención se centra en el mecanismo de comunicación de mensajes del procesamiento de eventos, es decir, si el destinatario de la llamada proporciona una notificación de finalización mientras espera el resultado del procesamiento de una cosa. Sincrónico: después de que el proceso del usuario realiza una llamada de solicitud, el kernel no proporciona un mecanismo de notificación, es decir, no se notifica al proceso del usuario después de que se completa el procesamiento de E / S del archivo, y el proceso del usuario debe preguntar al kernel si el procesamiento se completó. Asíncrono: Asíncrono. Después de que el proceso del usuario realiza una llamada de solicitud, el kernel devolverá el resultado de la llamada al proceso del usuario después de que se procese la llamada. Nginx es asíncrono.

  • Bloqueo / no bloqueo

    Preste atención al estado de la persona que llama antes de esperar a que regrese el resultado. Bloqueo: el bloqueo significa que la operación de E / S debe completarse por completo antes de regresar al espacio de usuario. Antes de que se devuelva el resultado de la llamada, la persona que llama se suspende y no puede hacer otras cosas. Sin bloqueo: sin bloqueo significa que la operación IO se llama inmediatamente para devolver un valor de estado al usuario. No es necesario esperar hasta que la operación IO se complete por completo. Antes de que se devuelva el resultado final de la llamada, la persona que llama no será suspendida y podrá hacer otras cosas.

Tómame a comer como ejemplo: pedí 10 bollos

  • Sincrónico y asincrónico:

    Después de que ordené los bollos, el chef me dijo:

    • Sincronización: El chef pondrá los bollos en la posición designada después de hacer los bollos, pero antes de hacer los bollos, debes ir a ver si los bollos están listos, el chef no hará los bollos.

    Avísame cuando termine.

    • Asincrónico: Después de que el chef hace los bollos, me dice dónde poner los bollos.
  • Bloqueo y no bloqueo:

    El estado después de que ordené los bollos:

    • Bloqueo: el chef ha estado esperando frente al plato de panecillos mientras hace panecillos y no puede hacer otras cosas.

    • Sin bloqueo: después de ordenar los bollos, puede hacer otras cosas, como ir de compras o comprar.
  • Combinación de modelos IO:

    • Bloqueo sincrónico: no puedo hacer nada más después de ordenar los bollos y no sé si los bollos están listos. Tengo que esperar y preguntarle al chef una y otra vez.

    No.

    • Sin bloqueo sincrónico: después de ordenar los bollos, puedes hacer otras cosas, pero no puedes hacer otras cosas durante mucho tiempo, porque todavía no sé si los bollos están bien hechos, así que tengo que hacerlo.

    He estado esperando y preguntando al chef una y otra vez si lo hizo bien, así que solo puedo hacer tiempo para hacer otra cosa.

    • Bloqueo asincrónico: no puedo ir y hacer otras cosas después de ordenar los bollos, pero el chef me dirá cuándo están hechos los bollos, es decir, no necesito cocinar los bollos una y otra vez.

    ¿Está hecho?

    • Sin bloqueo asincrónico: puedo hacer otras cosas después de ordenar los bollos, y siempre puedo hacer otras cosas, porque el chef me dirá cuándo están hechos los bollos.

5. Cinco modelos de E / S de red en sistema Unix y tres modos de trabajo de Apache

Hay cinco modelos de E / S de red en el sistema UNIX:

  • Modelo de E / S de bloqueo síncrono (E / S de bloqueo): El modelo de E / S de bloqueo es el modelo de E / S más simple. Los subprocesos de usuario se bloquean cuando el kernel realiza operaciones de E / S.
  • Modelo de E / S sincrónico sin bloqueo (E / S sin bloqueo): el proceso de aplicación ha estado esperando que el kernel responda después de enviar una solicitud de E / S al núcleo. Si el núcleo que procesa la operación de E / S solicitada no puede devolver el resultado de E / S inmediatamente, el proceso ya no esperará y continuará procesando otros Solicite, pero aún necesita el proceso para verificar si la E / S del kernel se completa después de un período de tiempo.
  • Multiplexación de E / S: El núcleo del sistema almacena en búfer los datos de E / S y permite que un solo proceso supervise varios descriptores de archivos. Una vez que un descriptor está listo, puede notificar al programa que realice las operaciones de lectura y escritura correspondientes.
    • En el sistema operativo Linux, todo se abstrae en archivos, entonces, ¿cómo se corresponden las aplicaciones con los diversos archivos del sistema? Se creó el descriptor de archivo (descriptor de archivo, denominado fd). Cuando una aplicación solicita al kernel que abra / cree un archivo, el kernel devolverá un descriptor de archivo correspondiente al archivo abierto / creado.
    • select, poll y epoll son la realización funcional del modelo de multiplexación IO en el sistema Linux. Select, poll y epoll son esencialmente E / S síncronas, porque todos deben ser responsables de la lectura y escritura después de que el evento de lectura y escritura esté listo y el proceso de lectura y escritura esté bloqueado.
    • El modo prefork de Apache es el proceso principal + multiproceso / subproceso único + modo de selección; el modo de trabajo Apache es el proceso principal + multiproceso / multiproceso + modo de encuesta.
  • E / S impulsada por señales (E / S impulsada por señales): el proceso del usuario puede registrar un manejador de señales a través de la llamada al sistema sigaction, y luego el proceso puede continuar ejecutándose hacia abajo.Cuando una operación de E / S está lista, el kernel notificará y activará un manejador de señales SIGIO para ejecutar , Y luego copie los datos que necesita el proceso del usuario desde el espacio del kernel al espacio del usuario.
    • El modo de evento de Apache es el proceso principal + multiproceso / multiproceso + modo controlado por señales.
  • E / S asíncrona (sin bloqueo) (E / S asíncrona): después de que el proceso del usuario realiza la llamada al sistema aio_read, no importa si los datos del kernel están listos, volverá directamente al proceso del usuario, y luego el proceso del modo de usuario puede hacer otras cosas y esperar hasta que los datos del socket estén listos , El kernel copia directamente los datos al proceso y luego envía una notificación desde el kernel al proceso.En las dos fases de E / S asíncrona sin bloqueo, el proceso es sin bloqueo.

Dos, conceptos básicos de Nginx

1. Optimización del sistema Ubuntu 18.04.5

# vim /etc/security/limits.conf   #在文件后补追加
#root账户的资源软限制和硬限制
root soft core unlimited
root hard core unlimited
root soft nproc 1000000
root hard nproc 1000000
root soft nofile 1000000
root hard nofile 1000000
root soft memlock 32000
root hard memlock 32000
root soft msgqueue 8192000
root hard msgqueue 8192000
#其他账户的资源软限制和硬限制
* soft core unlimited
* hard core unlimited
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft memlock 32000
* hard memlock 32000
* soft msgqueue 8192000
# vim /etc/sysctl.conf      #在文件后补追加
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

# Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65536

# # Controls the maximum size of a message, in bytes
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736

# # Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296

# TCP kernel paramater
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_sack = 1

# socket buffer
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 20480
net.core.optmem_max = 81920

# TCP conn net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 15

# tcp conn reuse
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_max_tw_buckets = 20000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syncookies = 1

# keepalive conn
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.ip_local_port_range = 10001 65000

# swap
vm.overcommit_memory = 0
vm.swappiness = 10

#net.ipv4.conf.eth1.rp_filter = 0
#net.ipv4.conf.lo.arp_ignore = 1
#net.ipv4.conf.lo.arp_announce = 2
#net.ipv4.conf.all.arp_ignore = 1
#net.ipv4.conf.all.arp_announce = 2

# reboot

2. Compile e instale Nginx

2.1 Información sobre la versión del software del sistema operativo

4.15.0-112-generic # 113-Ubuntu SMP Jue.9 Jul 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU / Linux

2.2 Obtenga el código fuente de nginx

Sitio web oficial: http://nginx.org/ , hay una entrada de descarga en el lado derecho de la página.

imagen-20201118205917571

imagen-20201118210054867

2.3 Compilar e instalar la preparación del entorno
  • Crear cuenta nginx
# groupadd -g 2020 nginx
# useradd -u 2020 -g 2020 -r -s /bin/bash nginx
  • Configuración de permisos de directorio de Nginx
# mkdir -p /app/nginx
# chown -R nginx:nginx /app
  • Editar y definir parámetros de instalación
# mkdir  /app
# tar xvf nginx-1.18.0.tar.gz
# cd nginx-1.18.0
# ./configure --help

  --help                             print this message

  --prefix=PATH                      set installation prefix
  --sbin-path=PATH                   set nginx binary pathname
  --modules-path=PATH                set modules path
  --conf-path=PATH                   set nginx.conf pathname
  --error-log-path=PATH              set error log pathname
  --pid-path=PATH                    set nginx.pid pathname
  --lock-path=PATH                   set nginx.lock pathname

  --user=USER                        set non-privileged user for
                                     worker processes
  --group=GROUP                      set non-privileged group for
                                     worker processes

  --build=NAME                       set build name
  --builddir=DIR                     set build directory

  --with-select_module               enable select module
  --without-select_module            disable select module
  --with-poll_module                 enable poll module
  --without-poll_module              disable poll module

  --with-threads                     enable thread pool support

  --with-file-aio                    enable file AIO support

  --with-http_ssl_module             enable ngx_http_ssl_module
  --with-http_v2_module              enable ngx_http_v2_module
  --with-http_realip_module          enable ngx_http_realip_module
  --with-http_addition_module        enable ngx_http_addition_module
  --with-http_xslt_module            enable ngx_http_xslt_module
  --with-http_xslt_module=dynamic    enable dynamic ngx_http_xslt_module
  --with-http_image_filter_module    enable ngx_http_image_filter_module
  --with-http_image_filter_module=dynamic
                                     enable dynamic ngx_http_image_filter_module
  --with-http_geoip_module           enable ngx_http_geoip_module
  --with-http_geoip_module=dynamic   enable dynamic ngx_http_geoip_module
  --with-http_sub_module             enable ngx_http_sub_module
  --with-http_dav_module             enable ngx_http_dav_module
  --with-http_flv_module             enable ngx_http_flv_module
  --with-http_mp4_module             enable ngx_http_mp4_module
  --with-http_gunzip_module          enable ngx_http_gunzip_module
  --with-http_gzip_static_module     enable ngx_http_gzip_static_module
  --with-http_auth_request_module    enable ngx_http_auth_request_module
  --with-http_random_index_module    enable ngx_http_random_index_module
  --with-http_secure_link_module     enable ngx_http_secure_link_module
  --with-http_degradation_module     enable ngx_http_degradation_module
  --with-http_slice_module           enable ngx_http_slice_module
  --with-http_stub_status_module     enable ngx_http_stub_status_module

  --without-http_charset_module      disable ngx_http_charset_module
  --without-http_gzip_module         disable ngx_http_gzip_module
  --without-http_ssi_module          disable ngx_http_ssi_module
  --without-http_userid_module       disable ngx_http_userid_module
  --without-http_access_module       disable ngx_http_access_module
  --without-http_auth_basic_module   disable ngx_http_auth_basic_module
  --without-http_mirror_module       disable ngx_http_mirror_module
  --without-http_autoindex_module    disable ngx_http_autoindex_module
  --without-http_geo_module          disable ngx_http_geo_module
  --without-http_map_module          disable ngx_http_map_module
  --without-http_split_clients_module disable ngx_http_split_clients_module
  --without-http_referer_module      disable ngx_http_referer_module
  --without-http_rewrite_module      disable ngx_http_rewrite_module
  --without-http_proxy_module        disable ngx_http_proxy_module
  --without-http_fastcgi_module      disable ngx_http_fastcgi_module
  --without-http_uwsgi_module        disable ngx_http_uwsgi_module
  --without-http_scgi_module         disable ngx_http_scgi_module
  --without-http_grpc_module         disable ngx_http_grpc_module
  --without-http_memcached_module    disable ngx_http_memcached_module
  --without-http_limit_conn_module   disable ngx_http_limit_conn_module
  --without-http_limit_req_module    disable ngx_http_limit_req_module
  --without-http_empty_gif_module    disable ngx_http_empty_gif_module
  --without-http_browser_module      disable ngx_http_browser_module
  --without-http_upstream_hash_module
                                     disable ngx_http_upstream_hash_module
  --without-http_upstream_ip_hash_module
                                     disable ngx_http_upstream_ip_hash_module
  --without-http_upstream_least_conn_module
                                     disable ngx_http_upstream_least_conn_module
  --without-http_upstream_random_module
                                     disable ngx_http_upstream_random_module
  --without-http_upstream_keepalive_module
                                     disable ngx_http_upstream_keepalive_module
  --without-http_upstream_zone_module
                                     disable ngx_http_upstream_zone_module

  --with-http_perl_module            enable ngx_http_perl_module
  --with-http_perl_module=dynamic    enable dynamic ngx_http_perl_module
  --with-perl_modules_path=PATH      set Perl modules path
  --with-perl=PATH                   set perl binary pathname

  --http-log-path=PATH               set http access log pathname
  --http-client-body-temp-path=PATH  set path to store
                                     http client request body temporary files
  --http-proxy-temp-path=PATH        set path to store
                                     http proxy temporary files
  --http-fastcgi-temp-path=PATH      set path to store
                                     http fastcgi temporary files
  --http-uwsgi-temp-path=PATH        set path to store
                                     http uwsgi temporary files
  --http-scgi-temp-path=PATH         set path to store
                                     http scgi temporary files

  --without-http                     disable HTTP server
  --without-http-cache               disable HTTP cache

  --with-mail                        enable POP3/IMAP4/SMTP proxy module
  --with-mail=dynamic                enable dynamic POP3/IMAP4/SMTP proxy module
  --with-mail_ssl_module             enable ngx_mail_ssl_module
  --without-mail_pop3_module         disable ngx_mail_pop3_module
  --without-mail_imap_module         disable ngx_mail_imap_module
  --without-mail_smtp_module         disable ngx_mail_smtp_module

  --with-stream                      enable TCP/UDP proxy module
  --with-stream=dynamic              enable dynamic TCP/UDP proxy module
  --with-stream_ssl_module           enable ngx_stream_ssl_module
  --with-stream_realip_module        enable ngx_stream_realip_module
  --with-stream_geoip_module         enable ngx_stream_geoip_module
  --with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module
  --with-stream_ssl_preread_module   enable ngx_stream_ssl_preread_module
  --without-stream_limit_conn_module disable ngx_stream_limit_conn_module
  --without-stream_access_module     disable ngx_stream_access_module
  --without-stream_geo_module        disable ngx_stream_geo_module
  --without-stream_map_module        disable ngx_stream_map_module
  --without-stream_split_clients_module
                                     disable ngx_stream_split_clients_module
  --without-stream_return_module     disable ngx_stream_return_module
  --without-stream_upstream_hash_module
                                     disable ngx_stream_upstream_hash_module
  --without-stream_upstream_least_conn_module
                                     disable ngx_stream_upstream_least_conn_module
  --without-stream_upstream_random_module
                                     disable ngx_stream_upstream_random_module
  --without-stream_upstream_zone_module
                                     disable ngx_stream_upstream_zone_module

  --with-google_perftools_module     enable ngx_google_perftools_module
  --with-cpp_test_module             enable ngx_cpp_test_module

  --add-module=PATH                  enable external module
  --add-dynamic-module=PATH          enable dynamic external module

  --with-compat                      dynamic modules compatibility

  --with-cc=PATH                     set C compiler pathname
  --with-cpp=PATH                    set C preprocessor pathname
  --with-cc-opt=OPTIONS              set additional C compiler options
  --with-ld-opt=OPTIONS              set additional linker options
  --with-cpu-opt=CPU                 build for the specified CPU, valid values:
                                     pentium, pentiumpro, pentium3, pentium4,
                                     athlon, opteron, sparc32, sparc64, ppc64

  --without-pcre                     disable PCRE library usage
  --with-pcre                        force PCRE library usage
  --with-pcre=DIR                    set path to PCRE library sources
  --with-pcre-opt=OPTIONS            set additional build options for PCRE
  --with-pcre-jit                    build PCRE with JIT compilation support

  --with-zlib=DIR                    set path to zlib library sources
  --with-zlib-opt=OPTIONS            set additional build options for zlib
  --with-zlib-asm=CPU                use zlib assembler sources optimized
                                     for the specified CPU, valid values:
                                     pentium, pentiumpro

  --with-libatomic                   force libatomic_ops library usage
  --with-libatomic=DIR               set path to libatomic_ops library sources

  --with-openssl=DIR                 set path to OpenSSL library sources
  --with-openssl-opt=OPTIONS         set additional build options for OpenSSL

  --with-debug                       enable debug logging

Puede consultar la descripción de la función del módulo nginx a través del documento del sitio web oficial

imagen-20201118211423656

imagen-20201118211504074

  • Compile e instale la preparación del entorno de software

    • Actualizar apt-get # apt update
    • Instalar gcc # apt install -y gcc
    • Instalar la biblioteca de dependencias de C ++ # apt install build-essential # apt install libtool
    • Instalar la biblioteca de dependencias pcre # apt install libpcre3 libpcre3-dev
    • Instalar la biblioteca de dependencias zlib # apt install zlib1g-dev
    • Instalar la biblioteca de dependencias ssl #apt install libssl-dev
  • Determine los parámetros de instalación personalizados

    En el sitio web oficial http://nginx.org/en/docs/configure.html, verifique el significado de los parámetros personalizados y los parámetros de la opción de instalación final:

    $ sudo ./configure --prefix = / app / nginx --user = nginx --group = nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module - con-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

2.4 Comience a compilar e instalar
  • configurar

    #  ./configure --prefix=/app/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
    
  • hacer

    # make
  • hacer instalar

    # make install
  • Inicie nginx después de compilar e instalar

    # /app/nginx/sbin/nginx
  • Acceda a la interfaz web nginx compilada e instalada:

    imagen-20201118230138056

3. Configuración común y optimización de Nginx

3.1 Agregar la ruta nginx a los parámetros del entorno
root@dl-homework:~# pwd
/root
root@dl-homework:~# ll
total 64
drwx------  5 root root  4096 Nov 19 10:03 ./
drwxr-xr-x 24 root root  4096 Nov 18 21:05 ../
-rw-------  1 root root 10257 Nov 19 09:46 .bash_history
-rw-r--r--  1 root root  3140 Nov 19 09:44 .bashrc
drwx------  2 root root  4096 Nov 14 11:28 .cache/
drwx------  3 root root  4096 Nov 14 11:28 .gnupg/
-rw-r--r--  1 root root   148 Aug 17  2015 .profile
drwxr-xr-x  2 root root  4096 Nov 14 11:55 .vim/
-rw-------  1 root root 12836 Nov 19 09:45 .viminfo
-rw-r--r--  1 root root    17 Nov 19 09:45 .vimrc
-rw-------  1 root root   134 Nov 19 10:03 .Xauthority
root@dl-homework:~# vim .bashrc

100 export PATH=$PATH:/app/nginx/sbin   #在文件最后一行添加

# . .bashrc
3.2 Utilice scripts de inicio para realizar el servicio nginx de inicio automático
# cd /lib/systemd/system
# vim nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking   
PIDFile=/run/nginx.pid   #要与nginx.conf里面的配置保持一致
ExecStart=/app/nginx/sbin/nginx -c /app/nginx/conf/nginx.conf  #更改为nginx的实际路径
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload

# systemctl start nginx.service
## systemctl enable nginx.service
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service.
3.3 Configuración básica de Nginx

Todos los parámetros se pueden encontrar en la documentación del sitio web nginx.com. Los parámetros predeterminados de nginx.conf:

# cd /app/nginx/conf
# grep -v "#"  nginx.conf |grep -v "^$"
worker_processes  1;
pid        /run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
# vim /app/nginx/conf/nginx.conf

 worker_processes  auto;       #进程数量
 worker_cpu_affinity  auto;    #进程与CPU绑定

 pid        /run/nginx.pid;    #文件位置要与nginx.service里的配置保持一致

 worker_rlimit_nofile   65535;   #允许一个工作进程打开的文件数

 events {
      worker_connections  102400;  #单个进程最大并发连接数
      accept_mutex on;   #避免群惊
      multi_accept on;   #允许接受多个新连接
  }

  http {
    include       mime.types;   #支持的文件类型
    default_type  application/octet-stream;  #无法识别就下载文件

     sendfile        on;  #实现文件零拷贝MMAP
     tcp_nopush      on;  #合并请求后统一发送给客户端,降低服务器端负载,配合sendfile使用
     gzip  on;  #开启文件压缩
     keepalive_timeout  65;  #长连接时间65秒
     server {
        listen       80;
        server_name  localhost;
        charset utf-8;   #更改中文字符集
        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

  }

# nginx -t
nginx: the configuration file /app/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /app/nginx/conf/nginx.conf test is successful
# systemctl reload nginx.service
3.4 Crear sitio para PC y sitio móvil
# mkdir /app/nginx/conf/conf.d
# vim /app/nginx/conf/conf.d/pc.conf
server {
    listen 80;
    server_name pc.home.net;

    location / {
        root /app/nginx/html/pc;
        }
    }

# vim /app/nginx/conf/conf.d/mobile.conf 
server {
    listen 80;
    server_name mobile.home.net;

    location / {
        root /app/nginx/html/mobile;
        }
    }

# mkdir /app/nginx/html/{pc,mobile}
# echo "mobile web" > /app/nginx/html/mobile/index.html
# echo "pc web" > /app/nginx/html/pc/index.html

# nginx -t
nginx: the configuration file /app/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /app/nginx/conf/nginx.conf test is successful

# systemctl reload nginx.service

Modifique el archivo C: \ Windows \ System32 \ drivers \ etc \ hosts en el sistema de Windows, agregue 172.20.2200.138 pc.home.net mobile.home.net, visite el sitio:

imagen-20201119194403714

imagen-20201119194444533

Supongo que te gusta

Origin blog.51cto.com/12302225/2552422
Recomendado
Clasificación