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 一樣。
這就是反向代理的簡單應用。