Windows Nginx 簡單入門(安裝/配置/反向代理)

Nginx 是 lgor Sysoev 爲俄羅斯訪問量第二的 rambler.ru 站點設計開發的。從2004年發佈至今,憑藉開源的力量,已經接近成熟與完善。
Nginx 功能豐富,可作爲HTTP服務器,也可作爲反向代理服務器,郵件服務器。支持 FastCGI、SSL、Virtual Host、URL Rewrite、Gzip 等功能。並且支持很多第三方的模塊擴展。
Nginx的穩定性、功能集、示例配置文件和低系統資源的消耗讓他後來居上,在全球活躍的網站中有12.18%的使用比率,大約爲2220萬個網站。

源碼:https://trac.nginx.org/nginx/browser
官網:http://www.nginx.org/

Windows Nginx 相關命令

start nginx         //開啓nginx
nginx -v            //顯示 nginx 的版本。
nginx -s stop       //快速關閉Nginx,可能不保存相關信息,並迅速終止web服務。
nginx -s quit       //平穩關閉Nginx,保存相關信息,有安排的結束web服務。
nginx -s reload     //修改Nginx配置信息後,不需要關閉nginx後重新啓動nginx,可讓改動生效。
nginx -s reopen     //重新打開日誌文件。
nginx -c filename   //爲 Nginx 指定一個配置文件,來代替缺省的。
nginx -t            //不運行,僅測試配置文件。nginx 將檢查配置文件的語法正確性,並嘗試打開配置文件中所引用到的文件。

Windows Nginx 基本使用

官網下載地址:http://nginx.org/en/download.html
今天這篇博文先來講 Windows 下的使用,先來說一下如何啓動:

C:\Users\Administrator>cd D:\Soft\nginx-1.18.0
C:\Users\Administrator>D:
D:\Soft\nginx-1.18.0>start nginx
cd D:\Soft\nginx-1.18.0
D:
start nginx

我下載解壓後放在 D:\Soft\nginx-1.18.0
cmd輸入命令 cd D:\Soft\nginx-1.18.0 但cd命令不會跳轉盤符。
所以這時候需要再輸入一下 D:
然後,我們直接 start nginx,這裏也許你會看到一個窗口一閃而過。不要慌,沒什麼問題。
此時打開任務管理器,可以看到兩個 nginx.exe 。這說明我們已經成功啓動了。

我們已經啓動了nginx,來看看啓動後的nginx是怎樣的。直接訪問 http://localhost 可以看到:

Welcome to nginx!

此時 Nginx 就啓動成功了,開哦發的各位同學要注意,如果不出現歡迎頁面最可能的是因爲默認的 80 端口被佔用,開發朋友們自己要排查一下。

Nginx 配置文件

我們可以看到nginx文件夾內有一個conf文件夾,打開其中的 nginx.conf,可以看到一段:
默認配置文件相關解釋如下:

#運行用戶
#user somebody;

#啓動進程數量,通常設置成和cpu的數量相等
worker_processes  1;

#全局錯誤日誌
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#PID文件,記錄當前啓動的nginx的進程ID
#pid        logs/nginx.pid;

#工作模式及連接數上限
events {
    #單個後臺worker process進程的最大併發鏈接數
    worker_connections  1024;
}

#設定 http 服務器,利用它的反向代理功能提供負載均衡支持
http {
    #設定mime類型(郵件支持類型),類型由mime.types文件定義
    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 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,
    #對於普通應用,必須設爲 on,如果用來進行下載等應用磁盤IO重負載應用,可設置爲 off,以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
    sendfile        on;
    #tcp_nopush     on;
    
    #連接超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip壓縮開關
    #gzip  on;

    server {
        #表示當前的代理服務器監聽的端口,默認的是監聽80端口。注意,如果我們配置了多個server,這個listen要配置不一樣,不然就不能確定轉到哪裏去了。
        listen       80;
        #表示監聽到之後需要轉到哪裏去,這時我們直接轉到本地,這時是直接到nginx文件夾內。
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location     表示匹配的路徑,這時配置了/表示所有請求都被匹配到這裏
        #root         裏面配置了root這時表示當匹配這個請求的路徑時,將會在這個文件夾內尋找相應的文件,這裏對我們之後的靜態文件伺服很有用
        #index        當沒有指定主頁時,默認會選擇這個指定的文件,它可以有多個,並按順序來加載,如果第一個不存在,則找第二個,依此類推。
        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page 代表錯誤的頁面
        #error_page  404              /404.html;

        #將服務器錯誤頁重定向到靜態頁 /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        #以http的方式轉發php請求到指定web服務器
        #將PHP腳本代理給Apache監聽127.0.0.1:80
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        #以fastcgi的方式轉發php請求到php處理
        #將PHP腳本傳遞給正在偵聽127.0.0.1:9000的FastCGI服務器
        #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;
        #}

        #拒絕web形式訪問指定文件,如很多的網站都是通過.htaccess文件來改變自己的重定向等功能。
        #拒絕訪問.htaccess文件,如果Apache的文檔根
        #與nginx的一致
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    # 自定義虛擬server
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    # https服務器配置
    #server {
    #    listen       443 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;
    #    }
    #}
}

這篇博文有更詳細的講解,想了解的園友都可以看下:
https://www.cnblogs.com/hovin/p/13182478.html

反向代理

摘一段百度百科的解釋:
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,
並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器。

這裏講得很明白。實際上就是一臺負責轉發的代理服務器,對外界暴露的地址是統一的,之後做內部任意的轉發。
我們讓 Nginx 監聽一個端口,譬如一般的默認瀏覽訪問 80 端口,但實際上我們轉發給在其他端口的站點,由它來處理真正的請求,當請求完成後,其他站點返回結果,
但數據此時沒直接返回,而是給了 Nginx,由 Nginx 進行返回。Nginx實現了一箇中間層的功能。

這裏我們來做一個簡單的例子:
上面講了一些配置了,那麼我們怎麼才能讓它訪問 localhost 時轉到我們自己的某個站點呢。
實際上就修改兩個地方:

    server_name localhost:8436; 
       
    location / {  
        proxy_pass http://localhost:8436;
    }  

我的站點在8436端口,大家可以根據自己的需要修改。
這裏有一個新的配置項 proxy_pass ,它表示代理路徑,相當於轉發,而不像之前說的root必須指定一個文件夾。
此時我們修改了文件,是不是就意思着必須先關了nginx再重新啓動了,其實不必,nginx可以重新加載文件的。
我們直接運行:

nginx -s reload

一切都沒問題了,然後我們再重新打開 http://localhost 它就不是剛纔的 welcome 頁面了,我們會看到站點的正常返回了。
這時,不管我們點擊什麼鏈接都是沒問題的,相當於直接訪問 http://localhost:8080 一樣。
這就是反向代理的簡單應用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章