nginx for windows

来源:https://www.cnblogs.com/MrHSR/archive/2020/01/09/12144673.html
-Advertisement-
Play Games

一.介紹安裝 公司由於linux雲伺服器還沒批下來,暫時先在windows伺服器上測試。Windows版nginx使用本地Win32 API(而非Cygwin模擬層)。當前僅使用select()和poll()(1.15.9)連接處理方法(事件驅動模型),因此不應期望高性能和可伸縮性(在linux上支 ...


一.介紹安裝

  公司由於linux雲伺服器還沒批下來,暫時先在windows伺服器上測試。Windows版nginx使用本地Win32 API(而非Cygwin模擬層)。當前僅使用select()和poll()(1.15.9)連接處理方法(事件驅動模型),因此不應期望高性能和可伸縮性(在linux上支持epoll,它是性能最高的一種)。由於這個原因和其他一些已知問題,適用於Windows的Nginx版本被認為是Beta版本。目前,除了XSLT過濾器,圖像過濾器,GeoIP模塊和嵌入式Perl語言之外,它提供的功能幾乎與UNIX版本的nginx相同。

  1.1下載安裝

    windows下載安裝包1.17.7 

    http://nginx.org/en/download.html

    啟動nginx, 沒有找到nginx.exe進程,

  C:\Users\Administrator>cd C:\nginx-1.17.7
  C:\nginx-1.17.7>start nginx

   查看日誌C:\nginx-1.17.7\logs 

   2020/01/03 13:55:53 [emerg] 11992#35328: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

 

 1.2 查看誰占用了80埠   

  C:\nginx-1.17.7>netstat -ano|findstr "80"
  TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4

  

       可能是http,查看下http服務狀態:

   C:\nginx-1.17.7>netsh http show servicestate 

       發現6468占用了,再查看任務管理器,是IIS占用了,如下所示:

    

   

  1.3 解決windows 80埠被iis占用

   方法1,啟動欄輸入regedit

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP

     將start 的3改為0 

       重啟伺服器,

   方法2:直接關閉iis中的預設站點 Default Web Site

     再次啟動 查看進程狀態 tasklist /fi "imagename eq nginx.exe"

  

   一個是主進程(守護進程),另一個工作進程

     訪問http://127.0.0.1/,查看nginx首頁

   

  1.4 nginx 命令管理

    nginx -s stop    快速結束服務

      nginx -s quit     正常結束服務

              nginx -s reload 更改配置,使用新配置啟動新工作進程,正常關閉舊工作進程

    nginx -s reopen 重新打開日誌文件

    Nginx/Win32是運行在一個控制台程式,而非windows服務方式的。

 

   1.5其它事項

    日誌文件,如果是debug級別,日誌文件會增長的比較快。需要更大的磁碟目錄空間。

    

 二. windows下nginx.conf配置示例

#預設所有用戶都能啟動nginx進程
#user  nobody; 

#worker進程數,配置對應cpu核心數
worker_processes  1;


#伺服器錯誤日誌
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;



#主進程,也叫守護進程pid存放路徑
#pid        logs/nginx.pid;

#有預設的事件驅動模型
events {
    #每個worker進程的最大連接數
    worker_connections  1024;
    accept_mutex on;  #預設為on,解決"驚群"問題
}


http {
    #識別web資源類型,引入外部 mime.types文件,路徑在conf/mime.types下
    include       mime.types;
    #預設資源類型
    default_type  application/octet-stream;

    #自定義服務日誌,這裡記錄前端請求的日誌,而不是全局中nginx進程運行的常規日誌
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"';

    #訪問日誌,main是log_format格式字元串
    #access_log  logs/access.log  main;

    #方式轉輸方式,轉輸的數據最大量不能超過sendfile_max_chunk 128k
    sendfile        on;
    #tcp_nopush     on;

    #設置格式
    charset  utf-8;   

    #配置連接超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #預設開啟gzip壓縮
    #gzip  on;


     # 緩存設置,基於proxy_cache機制
     #path緩存目錄
     #levels相對於path指定目錄的第幾級hash目錄中緩存數據文件,目錄層級2級,
     #keys_zone索引記憶體區功能變數名稱稱 10m是大小
     #max_size硬碟中緩存數據的大小限制(超過啟動nginx自己的淘汰規則),
     #inactive在60分鐘的時間內沒有被訪問就會被清理,存放臨時文件
     #use_temp_path 關閉
     proxy_cache_path  cache levels=1:2 keys_zone=ABC_cache:10m max_size=5g inactive=60m use_temp_path=off;



    # HTTP server   監聽 www.ABC.com
    server {
        listen   80; #監聽埠
        server_name  www.ABC.com; 
        
        #創建獨立的日誌,重點:手動在logs下創建www.ABC.com文件夾
        access_log  logs/www.ABC.com/access.log;
        error_log  logs/www.ABC.com/error.log;
        #charset koi8-r;
        location / {
             #root   html;
             #index  index.html index.htm;

             #緩存設置
            proxy_cache ABC_cache;
            proxy_cache_methods GET HEAD POST;
            proxy_cache_valid 200 304 60m; #200和304頭信息過期時間
            proxy_cache_valid 404 1m;
            proxy_cache_valid any 10m;  #其他過期時間10分鐘
            expires 2h;
            proxy_pass http://ABCservers;
        }
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
        { 
            #目錄是本機web伺服器靜態資源目錄
            root  D:\\www\www.ABC.com\wwwroot;
            index  index.html index.htm;
        } 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
       }
    }


    # HTTPS server 監聽apicms.ABC.com埠
    server {
        listen       443 ssl;
        server_name  apicms.ABC.com;

        #創建獨立的日誌,重點:手動在logs下創建apicms.ABC.com文件夾
        access_log  logs/apicms.ABC.com/access.log;
        error_log  logs/apicms.ABC.com/error.log;

        ssl_certificate      ./ssl/apicms.ABC.com.crt;
        ssl_certificate_key  ./ssl/apicms.ABC.com.rsa;

        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;
            proxy_pass https://apicmsservers;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            #web伺服器端獲得用戶的真實ip request.getAttribute("X-Real-IP")
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Real-Port $remote_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

      #apicms後端伺服器組,如果一個伺服器處理請求出錯,會順次交給組內下一個伺服器進行處理,以此類推
      upstream  apicmsservers{
          #當某個server請求二次失敗後,10分鐘以不會把請求發往已檢查出標記為不可用的伺服器
          server 127.0.0.1:44301  max_fails=2 fail_timeout=600s weight=5;
          server 192.168.0.125:44301 max_fails=2 fail_timeout=600s weight=5;
       }
  
        #官網後端伺服器組
       upstream  ABCservers{
          server 127.0.0.1:8081 max_fails=2 fail_timeout=600s weight=5;
          server 192.168.0.125:8081 max_fails=2 fail_timeout=600s weight=5;
       }
}

  (1) https協議需要證書, 將申請的.pfx證書使用openssl工具,將轉換成crt和rsa文件。再放在nginx目錄的ssl文件夾下,轉換示例如下:
    openssl >pkcs12 -in D:\SSL\1717704_apicms.ABC.com.pfx -clcerts -nokeys -out D:\SSL\apicms.ABC.com.crt

    openssl >pkcs12 -in D:\SSL\1717704_apicms.ABC.com.pfx -nocerts -nodes -out D:\SSL\apicms.ABC.com.rsa

  (2)配置中所有相對路徑,都是nginx目錄下的。 比如:logs/  , proxy_cache_path cache ,  ./ssl

  (3) 如果沒有購買功能變數名稱綁定當前nginx伺服器ip, 那麼測試需要在nginx伺服器上使用hosts文件。才能監聽server塊的虛擬主機名,hosts綁定如下所示:

    127.0.0.1  apicms.ABC.com

    127.0.0.1  www.ABC.com

    再ping下確認,hosts文件是否生效

 

   

 參考資料

    http://nginx.org/en/docs/windows.html

    


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概覽 最近有個需求是通過c 代碼來啟動 python 腳本。嘿~嘿!!! 突發奇想~~既然可以啟動 python 腳本,那也能啟動 flask,於是開始著手操作。 先看gif圖 準備 因為使用的是 來創建的控制台程式,啟動flask web程式,所以需要下載 , 如果使用的是 直接運行即可,當前是生 ...
  • 很簡單,就是先全屏截圖,然後再按需要裁剪就可以了。 所以,首先要獲取桌面的大小,代碼如下: 使用 PrimaryScreen.DESKTOP 就可以獲取桌面解析度的大小了,有了這個大小,就可以開始全屏截圖了,代碼如下: 調用 ImageHelper.GetScreen() 即可以獲取全屏截圖 再然後 ...
  • 前言 這是我第一次在寫博客,裡面記錄了我配置LAMP遇到的各種各樣的細節,也許表述不夠準確,希望大佬給於批評指正 環境 OS Ubuntu server 18.04.3 遠程連接軟體 cmder 文件傳輸軟體 winSCP 安裝和遠程連接 其實安裝的時候就需要註意兩點 1. 讓你輸入鏡像地址的時候, ...
  • MAC安裝MacPorts 卡在“正在運行軟體包腳本”的解決辦法 1. 點擊右上角強制結束掉“安裝器” 2. 打開terminal, 輸入命令“ps ef | grep install”, 找到遺留進程, kill掉 3. 安裝Xcode 4. 輸入命令“xcodebuild license” 並同 ...
  • 網上查了很多資料瞭解網卡啟動不了的原因,今天總結一下幾種網卡啟動不了的解決方案,以備參考。 systemctl restart network //重啟網卡 返回報錯: Restarting network (via systemctl): Job for network.service faile ...
  • win10自帶郵箱如何使用? 相信很多小伙伴在登錄win10自帶的郵箱登錄QQ郵箱時,顯示同步失敗或者登錄超時,但又找不到相關的資料,下麵是我自己郵箱的操作流程,小伙伴可以嘗試一下,有什麼問題留言即可 一、準備工作: 登錄網頁版QQ郵箱,設置→賬戶→找到“POP3/IMAP/SMTP/Exchang ...
  • hp proliant sl210t伺服器,一般都會帶有兩個陣列卡 一個伺服器自帶的Dynamic Smart Array B120i RAID控制器,一個為Slot卡槽上的Smart Array P420控制器 這裡我們使用Smart Array P420對伺服器的磁碟進行raid 1類型的陣列配 ...
  • 今天碰到個負載高引起的問題但是查看zabbix監控並沒有報警,檢查後發現監控取值與實際伺服器內負載不一致。 解決方法 修改zabbix模板Template OS Linux找到 Processor load (1 min average per core)修改key把 system.cpu.load ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...