Introdução e instalação do Nginx

Nginx ( motor _ _ O servidor pode suportar 30.000 ~ 50.000 solicitações simultâneas) Comparado com o apache, as solicitações simultâneas não são tão altas quanto nginx e a simultaneidade do apache é de cerca de 20.000

Cenários (ou funções) de aplicativos Nginx
Processamento estático: tanto o httpd quanto o nginx só podem lidar com páginas estáticas por padrão
Proxy reverso: não processa diretamente as solicitações do cliente, mas transfere as solicitações para outros servidores
Balanceamento de carga: combinado com proxy reverso, responsável por transferir o solicitação do cliente para outros servidores com menos pressão.
Cache de recursos: armazena em cache os dados acessados ​​com frequência pelo cliente, agilizando assim o acesso do cliente.
Proteção de segurança: o nginx possui certas medidas de proteção para si.
Restrições de acesso: semelhante Para o pedido do apache negar, permitir
o acesso autenticação: adicione nome de usuário e senha ao site visitado

1. Introdução à E/S (entrada/saída)

Cada E/S passa por dois estágios:
1. Carregue primeiro os dados do arquivo do disco para o espaço do kernel (buffer) e aguarde a conclusão da preparação dos dados, o que leva muito tempo. 2.
Copie os dados do buffer do kernel para o espaço do usuário.Na memória do processo, o tempo é menor

Atenção síncrona/assíncrona é o mecanismo de comunicação de mensagens do receptor

Síncrono: O chamador espera que o chamador retorne uma mensagem antes de continuar a execução.
Por exemplo: o chefe atribui uma tarefa a você e fica perguntando se ela foi concluída. Depois de concluir o chefe, faça a próxima coisa. Este mecanismo de comunicação se torna síncrono e
assíncrono: o receptor passa O mecanismo de status, notificação ou retorno de chamada notifica ativamente o receptor sobre o status em execução
. Por exemplo: o chefe atribui a você uma tarefa e você relatará o status do progresso da tarefa ao chefe. O chefe faz suas próprias coisas e não pedirei os resultados.

A diferença entre síncrono e assíncrono
Sincronizar O receptor não retornará o status da tarefa e o chamador precisará continuar perguntando.
assíncrono O receptor retornará o status da tarefa ao chamador sem que ele pergunte constantemente.

Bloqueio/não bloqueio: concentre-se no estado do chamador antes de aguardar o retorno do resultado

Bloqueio: significa que a operação de I/O precisa ser totalmente concluída antes de retornar ao espaço do usuário. Antes que o resultado da chamada seja retornado, o chamador é suspenso. Por exemplo:
lavar roupas à mão, você fica ocupado até que a lavagem seja concluída.
Sem bloqueio (nobloking): significa que a operação de E/S retorna ao estado de usuário imediatamente após ser chamada, sem esperar que a operação de E/S seja completamente concluída. O chamador não será suspenso antes que o resultado final da chamada seja retornado. exemplo: uma máquina de lavar totalmente automática, que não precisa ser
ocupada . Você será avisado quando a roupa estiver lavada. Durante esse período, você não estará ocupado lavando roupas.

Os modelos de E/S incluem: bloqueio síncrono, não bloqueio síncrono, bloqueio assíncrono (seleção de multiplexação de IO), semibloqueio assíncrono (apache orientado por sinal), não bloqueio assíncrono (modelo de IO assíncrono nginx)

2. modo nginx

O nginx possui dois modos de trabalho: modo mestre-trabalhador e modo de processo único

master-worker: Neste modo, após o nginx ser iniciado com sucesso, haverá um processo master e pelo menos um processo de trabalho. O processo mestre é responsável por processar sinais do sistema, carregar configurações e gerenciar processos de trabalho (iniciar, encerrar, monitorar, enviar mensagens/sinais, etc.)

Vantagens dos padrões
1. Alta estabilidade. Enquanto houver processos de trabalho ativos, os serviços poderão ser fornecidos. Se um processo de trabalho desligar o processo mestre, um novo processo de trabalho será iniciado imediatamente, garantindo que o número de processos de trabalho permaneça inalterado e reduzindo o probabilidade de interrupção do serviço.
2. Com a configuração de afinidade de CPU do Linux, você pode aproveitar ao máximo as vantagens das CPUs multi-core e melhorar o desempenho.
3. Ao processar sinais/recarregar/atualizar a configuração, isso pode ser feito com a menor ou nenhuma interrupção de serviço possível.

Modo de processo único: existe apenas um processo após o início do nginx , e esse processo é responsável por todo o trabalho do nginx . Como existe apenas um processo, ele pode ser facilmente depurado usando ferramentas como gdb . Este modo não suporta a função de atualização suave do nginx . Qualquer processamento de sinal pode causar interrupção do serviço. Como é um processo único, após o processo travar, o serviço não pode ser reiniciado sem monitoramento externo. Portanto, este modo geralmente é usado apenas durante a fase de desenvolvimento e depuração, e não será usado no ambiente de produção.

3. Instalação do nginx

Método de instalação um: instalação de rede yum

Certifique-se de que você pode executar ping na rede externa

[root@C7--01 ~]# ping www.baidu.com
PING www.a.shifen.com (183.232.231.174) 56(84) bytes of data.
64 bytes from ptr.cq.chinamobile.com (183.232.231.174): icmp_seq=1 ttl=51 time=380 ms
64 bytes from ptr.cq.chinamobile.com (183.232.231.174): icmp_seq=2 ttl=51 time=114 ms
64 bytes from ptr.cq.chinamobile.com (183.232.231.174): icmp_seq=3 ttl=51 time=106 ms
64 bytes from ptr.cq.chinamobile.com (183.232.231.174): icmp_seq=4 ttl=51 time=108 ms

O site do pacote In:nginx:linox pode ser instalado usando web yum:

imagem

O processo de instalação pode ser concluído seguindo as etapas acima

imagem

Comando de inicialização: nginx

Verifique a porta após a conclusão da instalação

Método de instalação dois: instalação do código-fonte; baixe o pacote de software nginx do site oficial

Caminho do site oficial: nginx: download nginx: download nginx: download

imagem

Baixe a versão nginx-1.18.0 desta vez

Carregar pacote nginx-1.18.0.tar.gz

[root@C7--01 ~]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel   #安装相关软件包
[root@C7--01 ~]# ls           
anaconda-ks.cfg  nginx-1.18.0.tar.gz  yum.sh            
 
[root@C7--01 ~]# useradd -M -s /sbin/nologin nginx              
 
[root@C7--01 ~]# tar -zxvf /root/nginx-1.18.0.tar.gz -C /usr/src                     
......
...
[root@C7--01 ~]# cd /usr/src/nginx-1.18.0/
[root@C7--01 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_dav_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_ssl_module --with-http_gzip_static_module                                      
........
....
[root@C7--01 nginx-1.18.0]# make && make install                      
....
..
.
[root@C7--01 nginx-1.18.0]# /usr/local/nginx/sbin/nginx -t               #测试安装是否成功
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
 
[root@C7--01 nginx-1.18.0]# /usr/local/nginx/sbin/nginx                   #启动
 
 
[root@C7--01 nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/                           

acesso

imagem

A instalação está completa

4. Introdução e operação do arquivo de configuração nginx

Nota: Diferentes métodos e caminhos de instalação são diferentes.

Qual é a estrutura de diretórios do Nginx?

tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp
├── conf # Nginx所有配置文件的目录
│ ├── fastcgi.conf # fastcgi相关参数的配置文件
│ ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
│ ├── fastcgi_params # fastcgi的参数文件
│ ├── fastcgi_params.default       
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types # 媒体类型
│ ├── mime.types.default
│ ├── nginx.conf # Nginx主配置文件
│ ├── nginx.conf.default
│ ├── scgi_params # scgi相关参数文件
│ ├── scgi_params.default  
│ ├── uwsgi_params # uwsgi相关参数文件
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp # fastcgi临时数据目录
├── html # Nginx默认站点目录
│ ├── 50x.html # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
│ └── index.html # 默认的首页文件
├── logs # Nginx日志目录
│ ├── access.log # 访问日志文件
│ ├── error.log # 错误日志文件
│ └── nginx.pid # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp # 临时目录
├── sbin # Nginx命令目录
│ └── nginx # Nginx的启动命令
├── scgi_temp # 临时目录
└── uwsgi_temp # 临时目录

1. Introdução aos arquivos de configuração

módulo Função
principal (configurações globais) A diretiva set afetará todas as outras configurações
eventos (modo de trabalho nginx) Defina o modo de trabalho e o número de conexões
http (configurações http) Definir tempo limite, etc.
servidor (configurações do host) Usado principalmente para especificar o host e a porta
localização (correspondência de URL) Usado para corresponder aos locais das páginas da web

1.Main está localizado no nível mais alto do arquivo de configuração nginx.conf.
2. Pode haver camadas Event e HTTP na camada Main.
3. Múltiplas camadas de servidor são permitidas na camada HTTP, que são usadas para definir configurações diferentes. para sites diferentes.
4. Camada do servidor Vários locais também são permitidos

[root@C7--01 ~]# vim /usr/local/nginx/conf/nginx.conf            #进入配置文件
 
----------------------------以下是全局配置端(main)
 
 
  1 
  2 #user  nobody;                                  #设置master进程启动后,fork出的worker进程运行在哪个用户和用户组下;默认由nobody账号运行
  3 worker_processes  4(或auto);                   #指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍)
    worker_cpu_affinity 0001 0010 0100 1000         #将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的
  4 worker_cpu_affinity auto                        #自动绑定设置
 
  5 #error_log  logs/error.log;                     #指定错误日志存放的路径
  6 #error_log  logs/error.log  notice;             #错误日志记录级别
  7 #er  nobody;
  8 #  3 worker_processes  1;
  9 #    4   
 10 #    rror_log  logs/error.log  info;
 11 
 12 #pid        logs/nginx.pid;                     #指定进程pid的存储文件位置
 13     
 14 worker_rlimit_nofile 512000;                    #工作进程最大打开文件数                           
 15 events {
    
                                            #事件模块
 16     use epoll;                                  #使用的网络I/O模型,Linux推荐使用epoll模式;默认为epoll模式
 17     worker_connections  1024;                   #用于定义Nginx每个进程的最大连接数,默认是1024
 18 }   
 19   
 20 http {
    
    
 21     include       mime.types;                  #导入支持的文件类型
 22     default_type  application/octet-stream;    #设置默认的类型,会提示下载不匹配的类型文件
 23 
 24     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                   # log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用
 25     #                  '$status $body_bytes_sent "$http_referer" '
 26     #                  '"$http_user_agent" "$http_x_forwarded_for"';
 27 
 28     #access_log  logs/access.log  main;
 29 
 30     sendfile        on;                                                   #用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
 31     #tcp_nopush     on;                                                   #在开启了sendfile的情况下,合并请求后统一发送给客户端
 32 
 33     #keepalive_timeout  0;
 34     keepalive_timeout  65;                                                #设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接;单位是秒
 35 
 36     #gzip  on;                                                            #开启文件压缩
 37 
 38     server {
    
                                             #定义作为web服务器的相关属性  可以有多个
 39         listen       80;                             #监听的端口
 40         server_name  localhost;                      #设置server name,可以以空格隔开写多个,支持正则表达式,如 *.aaa.com,www.aaa.* ~^www\d+\.aaa\.com$ default_server
 41 
 42         #charset koi8-r;                             #设置编码格式,默认是俄语格式,可以改为utf-8
 43 
 44         #access_log  logs/host.access.log  main;     #设备访问日志
 45 
 
 46         location / {
    
                                     #定义一个虚拟主机的属性,所有的web服务必须定义成一个虚拟主机
 47             root   html;                             #指定网站目录
 48             index  index.html index.htm;             #指定默认网页文件,此指令由ngx_http_index_module模块提供
 49         }
 50 
 51         #error_page  404              /404.html;
 52 
 53         # redirect server error pages to the static page /50x.html
 54         #
 55         error_page   500 502 503 504  /50x.html;     #当发生错误的时候能够显示一个预定义的uri(相对路径)
 56         location = /50x.html {
    
    
 57             root   html;
 58         }
 59 

2. operações relacionadas ao nginx

nginx -h                 # 查看帮助信息
 
nginx -v                 # 查看nginx版本
 
nginx start              # 启动nginx
 
nginx -s quit            # 关闭nginx,完整有序的停止nginx,保存相关信息
 
nginx -s stop            # 关闭nginx,快速停止nginx,可能不保存相关信息
 
nginx -s reload          # 重新载入nginx,当配置信息需要重新加载配置时使用
 
nginx -t -c filename     # 测试nginx配置文件是否正确
 
nginx -s reopen          # 重新打开日志文件

3. A localização do caminho do nginx instalado por yum

[root@C7--01 ~]# rpm -ql nginx                               #查看所有nginx路径
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.21.4
/usr/share/doc/nginx-1.21.4/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx

Código fonte: O arquivo está localizado onde quer que esteja instalado. Você também pode usar o comando acima para visualizá-lo.

4. Introdução ao log de acesso nginx

Vejamos primeiro as solicitações e devoluções http

[root@C7--01 ~]# curl -v 192.168.2.1
* About to connect() to 192.168.2.1 port 80 (#0)            #请求行
*   Trying 192.168.2.1...
* Connected to 192.168.2.1 (192.168.2.1) port 80 (#0)       #请求头
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.2.1
> Accept: */*                                               #请求数据 
> 
< HTTP/1.1 200 OK                                           #状态码
< Server: nginx/1.18.0
< Date: Fri, 19 Nov 2021 14:48:37 GMT
< Content-Type: text/html
< Content-Length: 612
< Last-Modified: Fri, 19 Nov 2021 14:33:40 GMT
< Connection: keep-alive
< ETag: "6197b5c4-264"
< Accept-Ranges: bytes                                     #单位bytes
< 
<!DOCTYPE html>                                            #响应正文
<html> 
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
* Connection #0 to host 192.168.2.1 left intact

Os arquivos nginx são um pouco diferentes dos arquivos apache

Os arquivos do nginx são acces.log e error.log. Os arquivos do
apache são access_log e error_log.

[root@C7--01 ~]# vim /usr/local/nginx/conf/nginx.conf
 
 21     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
 22     #                  '$status $body_bytes_sent "$http_referer" '
 23     #                  '"$http_user_agent" "$http_x_forwarded_for"';
 24 
 25     #access_log  logs/access.log  main;
 26 

O formato é basicamente o mesmo do Apache, mas o nginx usa variáveis ​​​​internas. A seguir está uma introdução às variáveis.

[root@C7--01 ~]# vim /usr/lcoal/nginx/logs/access.log
 
192.168.2.1 - - [19/Nov/2021:22:48:37 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0"
$endereço_remoto Endereço IP de solicitação remota
Caixa de correio de usuário remoto Por padrão, não é exibido como -
$usuário_remoto O nome do usuário do cliente. Se não estiver disponível, substitua-o por -.
$hora_local carimbo de data/hora local
$solicitação Solicite um arquivo URI específico, como uma imagem JPG em uma página da web
$status código de status da solicitação http
$body_bytes_sent Solicitar tamanho do arquivo
$http_refer A fonte de salto do URL da página da Web e o endereço de origem podem ser falsificados. Por exemplo, uma página da web HTML chama o recurso URI da imagem
$http_user_agent Informações relacionadas ao navegador do terminal do usuário UserAgent
$http_x_forwarded_for É o IP real do solicitante HTTP. Este item só será adicionado ao passar pelo proxy HTTP ou servidor de balanceamento de carga.

Acho que você gosta

Origin blog.csdn.net/qq_36306519/article/details/131096083
Recomendado
Clasificación