Nginx安裝配置詳解
不論是本地開發,還是遠程到 Server 開發,還是給提供 demo 給人看效果,我們時常需要對 Nginx 做配置,Nginx 的配置項相當多,如果考慮性能配置起來會比較麻煩。不過,我們往往只是需要一個靜態 Server,或者一個反向代理 Server,這對 Nginx 來說小菜一碟。
簡介
Nginx 的安裝:
# CentOSyum install nginx;# Ubuntusudo apt-get install nginx;# Macbrew install nginx;
一般可以在/etc/nginx/nginx.conf
中配置,啟動參數為:
# 啟動nginx -s start;# 重新啟動,熱啟動,修改配置重啟不影響線上nginx -s reload;# 關閉nginx -s stop;# 修改配置后,可以通過下面的命令測試是否有語法錯誤nginx -t;
-s
,signal,意思就是向 nginx 發送start|reload|stop
命令,還是很好理解的。先看一個最簡單的nginx.conf
配置:
events { # 需要保留這一個段落,可以為空}http { server {listen 127.0.0.1:8888;location / { root /home/chenya/test/;} }}
啟動后,訪問htttp://127.0.0.1:8888
,如果/home/chenya/test/
下有index.html
文件就會展示index.html
的內容,否則返回404
。
Nginx 配置一個 Web 服務器
以下對配置 Web 服務器的參數做簡單說明,包括如何配置端口、域名,如何處理請求,如何響應請求。
1、 虛擬主機和請求的分發
域名和端口的配置
listen 127.0.0.1:8000;listen *:8000;listen localhost:8000;# IPV6listen [::]:8000;# other paramslisten 443 default_serer ssl;listen 127.0.0.1 default_server accept_filter=dataready backlog=1024
主機名配置
server_name www.chenya.site chenya.siteserver_name *.chenya.comserver_name ~^\.chenya\.com$
URI 匹配
location = / { # 完全匹配 = # 大小寫敏感 ~ # 忽略大小寫 ~*}location ^~ /images/ { # 前半部分匹配 ^~ # 可以使用正則,如: # location ~* \.(gif|jpg|png)$ { }}location / { # 如果以上都未匹配,會進入這里}
2、 文件路徑的定義
根目錄設置
location / { root /home/chenya/test/;}
別名設置
location /blog { alias /home/chenya/www/blog/;}location ~ ^/blog/(\d+)/([\w-]+)$ { # /blog/20141202/article-name # -> /blog/20141202-article-name.md alias /home/chenya/www/blog/$1-$2.md;}
首頁設置
index /html/index.html /php/index.php;
重定向頁面設置
error_page 404 /404.html;error_page 502 503 /50x.html;error_page 404 =200 /1x1.gif;location / { error_page 404 @fallback;}location @fallback { # 將請求反向代理到上游服務器處理 proxy_pass http://localhost:9000;}
try_files 設置
try_files $uri $uri.html $uri/index.html @other;location @other { # 嘗試尋找匹配 uri 的文件,失敗了就會轉到上游處理 proxy_pass http://localhost:9000;}location / { # 嘗試尋找匹配 uri 的文件,沒找到直接返回 502 try_files $uri $uri.html =502;}
Nginx 配置反向代理服務器
反向代理(reserve proxy)方式是指用代理服務器來接受 Internet 上的連接請求,然后將請求轉發給內部網絡中的上游服務器,并將上游服務器上得到的結果返回給 Internet 上請求連接的客戶端,此時代理服務器對外的表現就是一個 Web 服務器。
Nginx 具備超強的高并發高負載能力,一般會作為前端的服務器直接向客戶端提供靜態文件服務;而業務一般還包含一些業務邏輯需要 Apache、Tomcat 等服務器來處理,故通常 Nginx 對外表現即為靜態 Web 服務器也是反向代理服務器。
缺點是增加了一次請求的處理時間,優點是降低了上游服務器的負載,盡量將壓力放在 Nginx 服務器上。
1、負載均衡配置
upstream,定義一個上游服務器集群
upstream backend { # ip_hash; server s1.chenya.com; server s2.chenya.com;}server { location / {proxy_pass http://backend; }}
2、反向代理
proxy_pass 將請求轉發到有處理能力的端上,默認不會轉發請求中的 Host 頭部
location /blog { prox_pass http://localhost:9000; ### 下面都是次要關注項 proxy_set_header Host $host; proxy_method POST; # 指定不轉發的頭部字段 proxy_hide_header Cache-Control; proxy_hide_header Other-Header; # 指定轉發的頭部字段 proxy_pass_header Server-IP; proxy_pass_header Server-Name; # 是否轉發包體 proxy_pass_request_body on | off; # 是否轉發頭部 proxy_pass_request_headers on | off; # 顯形/隱形 URI,上游發生重定向時,Nginx 是否同步更改 uri proxy_redirect on | off;}
一個簡單的例子,Node.js
一個十分常見的需求:處理請求,如果是靜態文件,Nginx 直接返回,否則交給 Node 服務器處理。首先創建了一個 Node 服務器:
const http = require("http");http.createServer((req, res) => { res.end("hello world");}).listen(9000);
任何請求過來都返回hello world
,簡版的 Nginx 配置如下,
events { # 這里可不寫東西 use epoll;}http { server {listen 127.0.0.1:8888;# 如果請求路徑跟文件路徑按照如下方式匹配找到了,直接返回try_files $uri $uri/index.html;location ~* ^/(js|css|image|font)/$ { # 靜態資源都在 static 文件夾下 root /home/chenya/www/static/;}location /app { # Node.js 在 9000 開了一個監聽端口 proxy_pass http://127.0.0.1:9000;}# 上面處理出錯或者未找到的,返回對應狀態碼文件error_page 404 /404.html;error_page 502 503 504 /50x.html; }}
首先 try_files,嘗試直接匹配文件;沒找到就匹配靜態資源;還沒找到就交給 Node 處理;否則就返回 4xx/5xx 的狀態碼。
測試語法
nginx -t
到此這篇關于Nginx安裝配置的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持。
相關文章:
