arquivo de configuração nginx
localização do arquivo de configuração nginx
/usr/local/nginx/conf/nginx.conf
Composição do arquivo de configuração Nginx
(1) Bloco global
Desde o início do arquivo de configuração até o conteúdo do bloco de eventos, é principalmente para definir algumas instruções de configuração que afetam a operação geral do servidor nginx.
Por exemplo:
worker_processes 1; quanto
maior o valor de worker_processes, mais processamento simultâneo pode ser compatível e mais processos de trabalho.
Error_log representa o caminho de armazenamento do log de erro nginx
(2) bloco de eventos
As instruções envolvidas no bloqueio de eventos afetam principalmente a conexão de rede entre o servidor nginx e o usuário. Por
exemplo:
worker_connections 1024; o número máximo de conexões suportadas
(3) bloco http
bloco http é dividido em bloco global http e bloco de servidor bloco
global http:
incluir main.types; introduzir um arquivo externo -> / main.types colocar um grande número de tipos de mídia
incluindo vhosts / *. conf; introduzir um arquivo externo -> Importe o arquivo de configuração que termina com .conf no arquivo vhosts
Bloco de servidor:
listent: 80; monitorar raiz do
bloco de localização da porta 89
: / web / abc; enviar a solicitação recebida ao diretório especificado para solicitar recursos.
index: index.html; Por padrão,
é o ponto chave para encontrar o bloco do servidor de arquivos relativo no caminho acima , principalmente para a configuração de vários nomes de domínio e projetos, e pode ser usado para operações de proxy reverso.
Caso de proxy reverso
No servidor, mude o server_name para o endereço IP específico atual, em seguida, adicione um proxy_pass ao local, escreva o ip do servidor específico e o número da porta para ser proxy e espere que o cliente inicie uma solicitação para a porta 80 do nginx servidor, você pode usar o proxy diretamente para o nosso servidor de proxy reverso designado
// 把当前IP的80端口反向代理到当前IP的8080端口
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
Mapeamento de caminho de localização específico do Nginx
#优先级关系(越精确,优先级越高)
(location =) > (location /xxx/zzz/vvv) > (location ^~) > (location ~,~*) > (location /)
#1. = 匹配
location =/ {
#精准匹配,主机名后面不能带任何的的字符串
}
#2. 通用匹配
location /xxx {
#匹配所有以xxx开头的路径
}
#3. 正则匹配
location ~ /xxx {
# 匹配所有以xxx开头的路径
}
#4. 匹配开头路径
location ^~ /xxx {
# 匹配所有以xxx开头的路径
}
#5. ~* \.(gif|jpg|png)$ {
# 匹配以gif或者jpg或者png结尾的路径
}
Caso de balanceamento de carga
Adicione a parte upstream ao bloco global http, adicione todos os servidores que precisam de balanceamento de carga e adicione algumas regras, como ordem de prioridade, etc.
Em seguida, use proxy_pass no bloco de serviço para especificar o nome do balanceador de carga, da seguinte maneira, ele pode ser o balanceador de carga atual. Cada solicitação cairá em cada servidor uniformemente.
Para obter detalhes específicos, consulte os seguintes artigos resumidos por outros:
Nginx descrição detalhada detalhada do método de distribuição upstream.
Especificamente, cooperarei com o docker para fazer um caso, use o docker para construir dois servidores nginx e um servidor tomcat, mapeie diferentes números de porta e deixe um deles nginx server fazer o balanceamento de carga.
# 下载并运行一个nginx服务器,映射端口号8011到80端口
$ docker run -d -p 8011:80 --name some-nginx daocloud.io/library/nginx:latest
# 在运行一个nginx容器,映射端口号8012到80端口,4bb46517cac3 为刚才运行的nginx的容器的镜像id
$ docker run -d -p 8012:80 --name some-nginx1 4bb46517cac3
# 下载并运行一个tomcat服务器,映射端口号8082到8080端口, todo 注意tomcat的默认路径下的默认文件存在请求js和css,会多次请求服务器,如果用默认的负载均衡方式会导致负载均衡出问题,最好在tomcat下增加一个index.html文件来做测试,这样每一次访问只会请求到一台服务器,可以很直观的看到效果
$ docker run -d -p 8082:8080 --name t8 daocloud.io/library/tomcat:8.5.15-jre8
# 本地把需要做负载均衡的config配置文件先做好
$ vi default.conf
# default.conf nginx配置文件
upstream myServer{
server 10.0.2.15:8082; # IP 换成自己的
server 10.0.2.15:8012; # IP 换成自己的
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
# root /usr/share/nginx/html;
proxy_pass http://myServer;
index index.html index.htm;
}
}
# 把修改好的配置文件复制到docker的nginx容器(some-nginx)中
$ docker cp ./default.conf some-nginx:/etc/nginx/conf.d/default.conf
# 重启一下
$ docker restart some-nginx
Neste ponto, a configuração do servidor foi concluída e os resultados podem ser verificados e aceitos acessando o servidor de balanceamento de carga no navegador.
Estratégia de balanceamento de carga
Nginx fornece três estratégias de balanceamento de carga por padrão:
1. Polling: As solicitações iniciadas pelo cliente são distribuídas uniformemente para cada servidor
2. Peso: A solicitação do cliente será alocada de acordo com o valor do peso do servidor
. ip_hash: Baseado nos diferentes endereços ip do cliente que iniciou a requisição, ele sempre enviará a requisição para o servidor especificado, ou seja, se o endereço IP da requisição do cliente permanecer o mesmo, o servidor que está processando a requisição irá ser sempre o mesmo
votação
O caso de votação é o caso acima, é muito simples, o seguinte é uma descrição de configuração simples
# 需要轮询的Ip及端口号
upstream my_server{
server ip:port;
server ip:port;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://upstream名称/;
}
}
Pesos
O peso é implementado adicionando peso à parte traseira de cada servidor no upstream. Os detalhes são os seguintes. Depois de configurar o seguinte, eu reativo o servidor nginx com balanceamento de carga criado pelo docker e, em seguida, inicio uma solicitação. Após cinco solicitações para o servidor tomcat, haverá uma solicitação do servidor nginx.
upstream myServer{
server 10.0.2.15:8082 weight=10; # IP 换成自己的
server 10.0.2.15:8012 weight=2; # IP 换成自己的
#server 10.0.2.15:8011;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://myServer;
#root /usr/share/nginx/html;
index index.html index.htm;
}
}
ip_hash
Na realização do ip_hash, após adicionar ip_hash na primeira linha do upstream, o ip ficará travado, e cada ip só solicitará um servidor. Neste momento, reinicio o servidor e após fazer a solicitação, descobrirei que apenas o O servidor nginx pode ser acessado.
upstream myServer{
ip_hash;
server 10.0.2.15:8082 weight=10; # IP 换成自己的
server 10.0.2.15:8012 weight=2; # IP 换成自己的
#server 10.0.2.15:8011;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://myServer;
#root /usr/share/nginx/html;
index index.html index.htm;
}
}
Separação dinâmica e estática
Fórmula de simultaneidade do Nginx:
worker_processes * worker_connections / 4 | 2 = Capacidade final de simultaneidade do Nginx
Requisito de recurso dinâmico / 4, requisito de recurso estático / 2
Nginx melhora a capacidade de simultaneidade do Nginx por meio de separação dinâmica e estática e responde aos usuários mais rapidamente
Agente de recursos dinâmicos
Nada a dizer, basicamente era dinâmico antes
#配置如下
location / {
proxy_pass 路径;
}
Agente de recurso estático
# nginx 配置项
server {
listen 80;
listen [::]:80;
server_name localhost;
# 在 /web/data 下创建html文件夹,然后把一个index.html文件放到里边
location /html {
root /web/data;
index index.html;
}
# 在 /web/data 下创建img文件夹,然后把一个123.html文件放到里边
location /img {
root /web/data;
autoindex on; #代表展示静态资源的全部内容,以列表的形式展开
}
}
<!- index.html文件内容, 直接把图片也直接放到了内容中一起请求,看是否可以直接成功 ->
<h1>test img</h1>
<img src="http://192.168.1.113:8013/img/123.jpg"/>
Tudo bem sucedido, a página estática html pode ser acessada normalmente, e as imagens também podem ser acessadas normalmente
Estamos analisando a função do "autoindex on", como segue