Nginx является по России дизайнера процедуру Игоря Сысоева разработан высокопроизводительный веб-сервер и обратный прокси-сервер, также / POP3 / SMTP прокси-сервер IMAP. Некоторое время назад я слышал, что Игорь Сысоев России был увезен полицией, я не знаю, не потушить. Как говорить вернуться к нормальной, посмотрите на конфигурации Nginx для удовлетворения наших ежедневных потребностей.
0. шоколад установить Nginx
Поскольку блоггеры на ручных окон, поэтому окна непосредственно ввести как установить Nginx, если вы хотите знать, как установить под Linux, прочитайте другую статью http://www.randyfield.cn/post/2019-06-01-netcore -centos / # 3-Nginx
Я помню , в CentOS не yum
менеджер пакетов, и что окна под ним? Там не так уж простые вещи? Ответ : да, http://www.randyfield.cn/post/2019-06-01-netcore-centos/#4-%E5%AE%88%E6%8A%A4%E8%BF%9B%E7 A8%. 8B% ,
chocolatey
- шоколадная установка
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
- Установка Nginx
choco install nginx
Есть два момента отметить,
Благодаря
choco
установкеnginx
, она будет поддерживать установкуNSSM
, которая является хорошей вещью, может бытьnginx
зарегистрирован какwindows服务
эквивалент под LinuxSupervisor
иPM2
По
choco
установкаnginx
, вы согласны с последней необходимостью выбораy[Yes]
до того , обратите внимание на содержание обратной записи является то , что он будет выполнятьC:\ProgramData\chocolatey\lib\nginx\tools\chocolateyInstall.ps1
сценарий$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
Обратите внимание на
port
линию , что, да,80端口
, Nginx по умолчанию, поэтому , прежде чем продолжить, следующая проверка80端口
не находится в использовании, он будет занят установкой не удается. Как это сделать? Это вам только нужно редактировать сценарий выше, чтобы80
изменить未被占用的端口
. Затем перейдите обратно в окно командной строки, выберите Y, вы можете быть успешным.Например, я изменил
$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
Установленная nginx
в C:\tools
под, конфигурационный файл будет настроен по умолчанию инициализации следующей секции
1. Первоначальная конфигурация
#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. статические файлы Deploy
На самом деле, это развертывание статический файл инициализации
/
Запрос к html
папке 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;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3. Развертывание статических файлов Вью встроенный
Вью привел официальные документы - " по
vue-router
умолчаниюhash 模式
- использовать URL для имитации полного хэша URL, поэтому при изменении URL, страница не обновляется, но здесьurl
существует#
, он может быть изменен только в режиме истории , но это режимы хорошо играть, но и поддержка конфигурации фона. , потому что наше приложение является клиентским приложением одной страницы, если фон не является правильной конфигурация, когда пользователь прямого доступа браузера будет возвращать 404, который не выглядит хорошо. вы должны плюсtry_files $uri $uri/ /index.html;
"
try_files смысл: во- первых не будет соответствовать $uri文件
, если не совпадают $url/文件
, если нет будет идти/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. Обратный прокси
Развертывание передних и задних концов передней и задней частей с изолированной области
Back-концевой элемент может быть развернут в IIS, узле, веб-сервер Apache и т.д., но мы не хотим, чтобы жестко закодировать передний конец заднего конца запроса апи URL, и если бэкенд не позволяет заголовка запроса кросс Добавить, браузер будет заблокирован.
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;
}
}
}
вызов интерфейс конца Этот http://ip:81/api/
запрос, будет обратным прокси - сервер http://ip:port/outside/api/
, если у вас нет фона , чтобы позволить конфигурацию междоменной, то это способ обмануть браузер решения.
5. балансировка нагрузки
Популярная передний и задний конец режима разделения, в дополнении к серии параллельных преимуществ эффективности решения проблем, перед и после окончания разработки, освобождения производительности, развязок, быстро находить проблемы, есть горизонтальное расширение. Большие одновременно корпус, передние и задние сервера в то же время, можно расширить горизонтально, это расширение использования балансировки нагрузки.
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;
}
}
}
Здесь запрос api接口
, nginx
он будет перераспределен в соответствии со следующим три привилегией 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;
}
Если вы хотите проверить другой адрес каждый раз, когда это не так, пусть Nginx вперед обратиться каждый запрос возвращается в браузер вместе со следующей конфигурацией
#暴露反向代理的地址
add_header backendIP $upstream_addr;
add_header backendCode $upstream_status;
Развертывание интеграции 6. Подсистема
Наша компания имеет ASP.NET MVC
слияние старых проектов отделено от передней и задней части нового проекта
Старый проект платформы, в том числе несколько центров, один из которых является центром новых проектов
/
--- обратный прокси - сервер , чтобыIIS
развернутьASP.NET MVC
мастер станции^~/center1
--- передний конец сборки статических страниц, опубликованных Nginx^~/center1/api/
--- переднего конца интерфейс для использования API, обратный прокси-сервер балансировки нагрузки +
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
Лидерство , что Iis прежде чем вы можете сделать ваш сайт доступным через HTTPS, новые проекты нуждаются, https
необходимо ssl证书
, знать , что только большой сертификат сертификат компании SSL, люди будут распознавать браузер, например, Symantec, Entrust, Geotrust, в противном случае он не будет сообщено доверенные сертификаты. Но для того , чтобы удовлетворить потребности руководства, или openssl
генерируя соответствующий сертификат.
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
Система внезапно увеличилась websocket的服务
, прямой доступ к ws://ip:port
переднему концу следует положить конец жестко закодированный, поэтому nginx
играть снова.
websocket协议
В отличие http协议
, но websocket
рукопожатие пути http
, реализуемый протокол связи для усиления рулевого WebSocket от 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
На (веб - сайты HTTP доступа, интерфейсы) нормальных условиях, вышеупомянутая конфигурация завершена, но один раз ssl on
, оригинал ws
, это приведет к выходу консоли
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.
Вам потребуется следующая конфигурация
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. Часто задаваемые вопросы
Когда информация Nginx вперед Заголовок теряется
После пересылки через Nginx, информация заголовка теряются в access_token, после расследования, нашел Nginx вперед, подчеркивание _ заголовка атрибута по умолчанию, без пересылки, необходимо увеличить выделение:
server {
listen 80;
server_name 127.0.0.1;
#charset koi8-r;
#access_log logs/host.access.log main;
underscores_in_headers on;
}
Обратный прокси-операции истекло
Обратный прокси - интерфейс, обработка интерфейса бизнес более чем на 60 секунд, он сообщит time out
об ошибке.
proxy_read_timeout 600;
10. Ссылка Ссылка
https://blog.csdn.net/qq_29663071/article/details/80759098
https://www.nginx.com/blog/websocket-nginx/
https://blog.csdn.net/duyiwuerluozhixiang/article/details/100358930