Nginx é um pelo designer russo procedimentos Igor Sysoev desenvolvido servidor de alto desempenho na Web e proxy reverso, também um servidor IMAP / POP3 / SMTP proxy. Algum tempo atrás eu ouvi que Igor Sysoev da Rússia foi levado pela polícia, eu não sei não colocar para fora. Como falar de retorno ao normal, olhar para a configuração nginx para atender às nossas necessidades diárias.
0. chocolates instalar nginx
Porque os blogueiros estão em janelas mão, de modo que as janelas introduzir directamente como instalar nginx, se você quiser saber como instalar no Linux, leia outro artigo http://www.randyfield.cn/post/2019-06-01-netcore -centos / # 3-nginx
Lembro-me em CentOS não é um yum
gerenciador de pacotes, e que o Windows sob ela? Não existem coisas tão fáceis? A resposta é sim, http://www.randyfield.cn/post/2019-06-01-netcore-centos/#4-%E5%AE%88%E6%8A%A4%E8%BF%9B%E7 A8%. 8B% ,
chocolatey
- instalação achocolatada
Get-ExecutionPolicy
#如果返回的是Restricted
#就运行如下命令
Set-ExecutionPolicy AllSigned
#或者
Set-ExecutionPolicy Bypass -Scope Process
#接着执行-Paste the follow text into your shell and press Enter
#Wait a few seconds for the command to complete
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
#If you don't see any errors, you are ready to use Chocolatey
- instale nginx
choco install nginx
Há dois pontos a nota
Através
choco
da instalaçãonginx
, que vai apoiar a instalaçãoNSSM
, que é uma coisa boa, pode sernginx
registrado comowindows服务
equivalente a no LinuxSupervisor
ePM2
Ao
choco
instalarnginx
, você concorda com a última necessidade de selecionary[Yes]
antes, preste atenção ao conteúdo de write-back é que ele irá executarC:\ProgramData\chocolatey\lib\nginx\tools\chocolateyInstall.ps1
o script$toolsDir = Split-Path -parent $MyInvocation.MyCommand.Definition . "$toolsDir\helpers.ps1" $pp = Get-PackageParameters $arguments = @{ packageName = $env:chocolateyPackageName file = "$toolsDir\nginx-1.17.8.zip" destination = if ($pp.installLocation) { $pp.installLocation } else { Get-ToolsLocation } port = if ($pp.Port) { $pp.Port } else { 80 } serviceName = if ($pp.NoService) { $null } elseif ($pp.serviceName) { $pp.serviceName } else { 'nginx' } } if (-not (Assert-TcpPortIsOpen $arguments.port)) { throw 'Please specify a different port number...' } Install-Nginx $arguments
Observe a
port
linha de que, sim,80端口
, padrão nginx, por isso antes de prosseguir, a próxima verificação80端口
não estiver em uso, será ocupado pela instalação falhar. Como fazer? Isto é, você só precisa editar o script acima, para80
modificar um未被占用的端口
. Em seguida, proceder de volta para a janela de comando, selecione Y, você pode ser bem sucedido.Por exemplo, eu mudei para
$toolsDir = Split-Path -parent $MyInvocation.MyCommand.Definition . "$toolsDir\helpers.ps1" $pp = Get-PackageParameters $arguments = @{ packageName = $env:chocolateyPackageName file = "$toolsDir\nginx-1.17.8.zip" destination = if ($pp.installLocation) { $pp.installLocation } else { Get-ToolsLocation } port = if ($pp.Port) { $pp.Port } else { 81 } serviceName = if ($pp.NoService) { $null } elseif ($pp.serviceName) { $pp.serviceName } else { 'nginx' } } if (-not (Assert-TcpPortIsOpen $arguments.port)) { throw 'Please specify a different port number...' } Install-Nginx $arguments
Instalada nginx
em C:\tools
abaixo, o arquivo de configuração será configurado como padrão de inicialização próxima seção
1. Configuração Inicial
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 81;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 81;
# listen 81;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 81 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
2. arquivos estáticos Implantar
Na verdade, essa é uma implementação de arquivo de inicialização estática
/
Pedido para o html
pasta index.html
de arquivo
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3. Implantar arquivos estáticos Vue construído
Vue citou documentos oficiais - "
vue-router
defaulthash 模式
- use o URL para simular um hash completa da URL, por isso, quando as mudanças de URL, a página não recarregar, mas aquiurl
há um#
, só pode ser alterado o modo história , mas esta modos de jogar bem, mas também o suporte de configuração de fundo. porque a nossa aplicação é uma aplicação cliente de uma única página, se o fundo não é a configuração correta, quando um usuário para acessar diretamente o navegador irá retornar 404, o que não parece bom. você precisa alémtry_files $uri $uri/ /index.html;
"
try_files significado é: Em primeiro lugar irá corresponder $uri文件
, se não corresponder $url/文件
, se não há vontade de ir/index.html
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
#proxy_redirect off;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4. proxy reverso
Implantação de extremidades traseiras extremidades traseiras da frente da frente e e com o domínio isolado
pedaço de back-end pode ser implantado no IIS, Nó, servidor web Apache, etc., mas não quero codificar o front-end de back-end pedido api url, e se o backend não permite cross Adicionar cabeçalho da solicitação, o navegador será bloqueado.
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
#proxy_redirect off;
}
location /api/ {
proxy_pass http://ip:port/outside/api/; #反向代理
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_cookie_path /api /;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Essa chamada de interface-end http://ip:81/api/
pedido, será proxy reverso http://ip:port/outside/api/
, se você não tem o fundo para permitir a configuração de domínio cruzado, então esta é a maneira de enganar o navegador solução.
5. O balanceamento de carga
frente popular e extremidade traseira do modo de separação, além de uma série de vantagens de eficiência paralelas resolver problemas antes e após o fim do desenvolvimento, a libertação de produtividade, dissociação, localizar rapidamente problemas, há uma expansão horizontal. Grandes servidores concorrente caso, dianteiras e traseiras, ao mesmo tempo, pode se expandir horizontalmente, esta extensão no uso de balanceamento de carga.
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#api接口部署至3个不同的地方
upstream centerapi{
server 192.168.110.10:82 weight=5;
server 192.168.110.11:82 weight=3;
server 192.168.110.10:83 weight=2;
}
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
#proxy_redirect off;
}
location /api/ {
proxy_pass http://centerapi/; #反向代理
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_cookie_path /api /;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
#暴露反向代理的地址
#add_header backendIP $upstream_addr;
#add_header backendCode $upstream_status;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Aqui o pedido api接口
, nginx
ele vai re-alocados de acordo com o seguinte três privilégio pedido url
upstream centerapi{
server 192.168.110.10:82 weight=5;
server 192.168.110.11:82 weight=3;
server 192.168.110.10:83 weight=2;
}
Se você quiser testar um endereço diferente cada vez que não é, vamos nginx encaminhar para tratar cada pedido é devolvido ao navegador em conjunto com a seguinte configuração
#暴露反向代理的地址
add_header backendIP $upstream_addr;
add_header backendCode $upstream_status;
implantação integração 6. subsistema
Nossa empresa tem uma ASP.NET MVC
fusão de projetos antigos é separado da parte frontal e traseira do novo projeto
plataforma de projeto antigo, incluindo vários centros, um dos quais é o centro de novos projetos
/
--- proxy reverso paraIIS
implantar aASP.NET MVC
estação mestre^~/center1
--- páginas construção front-end estáticos, foi publicada por nginx^~/center1/api/
--- interface de front-end para utilização API, carga proxy reverso equilibrar +
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream centerapi{
server 192.168.110.10:82 weight=5;
server 192.168.110.11:82 weight=3;
server 192.168.110.10:83 weight=2;
}
server {
listen 80;
server_name 192.168.110.10;
#主站
location / {
proxy_pass http://192.168.110.10/;#ASP.NET MVC主站 IIS已部署
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
#新中心前端
location ^~/center1 {
proxy_pass http://192.168.110.10:81/;#前端构建的静态页面 即下面的配置
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
#新中心api
location ^~/center1/api/ {
proxy_pass http://centerapi/;#前端调用的接口
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
#proxy_redirect off;
}
#location /api/ {
#proxy_pass http://centerapi/; #反向代理
#proxy_http_version 1.1;
#proxy_set_header Host $http_host;
#proxy_cookie_path /api /;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection keep-alive;
#proxy_cache_bypass $http_upgrade;
#暴露反向代理的地址
#add_header backendIP $upstream_addr;
#add_header backendCode $upstream_status;
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
7.Https
Liderança que o IIS antes de você pode tornar seu site acessível através de https, novos projetos precisa, https
necessidade ssl证书
, saiba que só os grandes Certificado empresas SSL, as pessoas vão reconhecer o navegador, como Symantec, Entrust, Geotrust, caso contrário não será relatado certificados confiáveis. Mas, a fim de atender as necessidades da liderança, ou por openssl
gerar o respectivo certificado.
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream centerapi{
server 192.168.110.10:82 weight=5;
server 192.168.110.11:82 weight=3;
server 192.168.110.10:83 weight=2;
}
server {
listen 80;
server_name 192.168.110.10;
#ssl开启
ssl on;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
location / {
proxy_pass http://192.168.110.10/;#ASP.NET MVC主站
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
location ^~/center1 {
proxy_pass http://centerapi/;#前端构建的静态页面 即下面的配置
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
location ^~/center1/api/ {
proxy_pass http://192.168.110.10:81/;#前端调用的接口
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
#proxy_redirect off;
}
#location /api/ {
#proxy_pass http://centerapi/; #反向代理
#proxy_http_version 1.1;
#proxy_set_header Host $http_host;
#proxy_cookie_path /api /;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection keep-alive;
#proxy_cache_bypass $http_upgrade;
#暴露反向代理的地址
#add_header backendIP $upstream_addr;
#add_header backendCode $upstream_status;
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
8.Websocket
Sistema de repente aumentou websocket的服务
o acesso, direto para ws://ip:port
o front-end deve ser colocado um fim ao hard-coded, então nginx
jogar novamente.
websocket协议
Ao contrário http协议
, mas websocket
o protocolo de reconhecimento por http
, implementado por um protocolo de comunicação para melhorar a websocket direcção de http.
8.1 ws
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream centerapi{
server 192.168.110.10:82 weight=5;
server 192.168.110.11:82 weight=3;
server 192.168.110.10:83 weight=2;
}
upstream websocket{
server 192.168.110.10:1443 weight=1;
}
server {
listen 80;
server_name 192.168.110.10;
#ssl on;
#ssl_certificate ssl/server.crt;
#ssl_certificate_key ssl/server.key;
location / {
proxy_pass http://192.168.110.10/;#ASP.NET MVC主站
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
location ^~/center1 {
proxy_pass http://centerapi/;#前端构建的静态页面 即下面的配置
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
location ^~/center1/api/ {
proxy_pass http://192.168.110.10:81/;#前端调用的接口
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
#websocket
location ^~/websocket/ {
proxy_pass http://websocket;#前端调用的接口
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_connect_timeout 4s;
proxy_read_timeout 600;
proxy_send_timeout 12s;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
#proxy_redirect off;
}
#location /api/ {
#proxy_pass http://centerapi/; #反向代理
#proxy_http_version 1.1;
#proxy_set_header Host $http_host;
#proxy_cookie_path /api /;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection keep-alive;
#proxy_cache_bypass $http_upgrade;
#暴露反向代理的地址
#add_header backendIP $upstream_addr;
#add_header backendCode $upstream_status;
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
8.2 WSS
AT (sites http de acesso, interfaces) circunstâncias normais, a configuração acima é completa, mas uma vez ssl on
, o original ws
, ele vai levar à saída do console
Mixed Content: The page at ‘https://{域名}.com/‘ was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint ‘ws://{ip}:{port}/‘. This request has been blocked; this endpoint must be available over WSS.
Uncaught DOMException: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
Você terá a seguinte configuração
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream centerapi{
server 192.168.110.10:82 weight=5;
server 192.168.110.11:82 weight=3;
server 192.168.110.10:83 weight=2;
}
upstream websocket{
server 192.168.110.10:1443 weight=1;
}
server {
listen 80;
server_name 192.168.110.10;
ssl on;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://192.168.110.10/;#ASP.NET MVC主站
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
location ^~/center1 {
proxy_pass http://centerapi/;#前端构建的静态页面 即下面的配置
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
location ^~/center1/api/ {
proxy_pass http://192.168.110.10:81/;#前端调用的接口
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_cache_bypass $http_upgrade;
}
location ^~/websocket/ {
proxy_pass http://websocket;#前端调用的接口
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_connect_timeout 4s;
proxy_read_timeout 600;
proxy_send_timeout 12s;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
#proxy_redirect off;
}
#location /api/ {
#proxy_pass http://centerapi/; #反向代理
#proxy_http_version 1.1;
#proxy_set_header Host $http_host;
#proxy_cookie_path /api /;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection keep-alive;
#proxy_cache_bypass $http_upgrade;
#暴露反向代理的地址
#add_header backendIP $upstream_addr;
#add_header backendCode $upstream_status;
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
9. Perguntas Mais Frequentes
Quando a informação Nginx frente Header está perdido
Após o envio via Nginx, informações de cabeçalho está perdido em access_token, após investigação, descobriu Nginx de transmitir, sublinhado _ cabeçalho atributo padrão sem transmissão, é preciso aumentar a alocação:
server {
listen 80;
server_name 127.0.0.1;
#charset koi8-r;
#access_log logs/host.access.log main;
underscores_in_headers on;
}
operação proxy reverso expirou
Uma interface de proxy reverso, o negócio de processamento de interface de mais de 60 segundos, ele irá relatar time out
o erro.
proxy_read_timeout 600;
10. Ligações de Referência
https://blog.csdn.net/qq_29663071/article/details/80759098
https://www.nginx.com/blog/websocket-nginx/
https://blog.csdn.net/duyiwuerluozhixiang/article/details/100358930