Nginx基本使用

1、下載javascript

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

 

2、解壓文件css

在當前文件夾下經過終端就能夠操做nginxhtml

nginx -vjava

 

3、配置詳解node

#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;


述配置都是存放在main全局配置模塊中的配置項linux

user用來指定nginx worker進程運行用戶以及用戶組,默認nobody帳號運行nginx

worker_processes指定nginx要開啓的子進程數量,運行過程當中監控每一個進程消耗內存(通常幾M~幾十M不等)根據實際狀況進行調整,一般數量是CPU內核數量的整數倍web

error_log定義錯誤日誌文件的位置及輸出級別【debug / info / notice / warn / error / crit】算法

pid用來指定進程id的存儲文件的位置

worker_rlimit_nofile用於指定一個進程能夠打開最多文件數量的描述

 

events:用於nginx工做模式的配置

events { worker_connections 1024; multi_accept on; use epoll; }

上述配置是針對nginx服務器的工做模式的一些操做配置

worker_connections 指定最大能夠同時接收的鏈接數量,這裏必定要注意,最大鏈接數量是和worker processes共同決定的。

multi_accept 配置指定nginx在收到一個新鏈接通知後儘量多的接受更多的鏈接

use epoll 配置指定了線程輪詢的方法,若是是linux2.6+,使用epoll,若是是BSD如Mac請使用Kqueue

 

http:用於進行http協議信息的一些配置

做爲web服務器,http模塊是nginx最核心的一個模塊,配置項也是比較多的,項目中會設置到不少的實際業務場景,須要根據硬件信息進行適當的配置,常規狀況下,使用默認配置便可

http {
##
# 基礎配置
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# SSL證書配置
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;

##
# 日誌配置
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip 壓縮配置
##

gzip on;
gzip_disable "msie6";

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript
text/xml application/xml application/xml+rss text/javascript;

##
# 虛擬主機配置
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

 

sendfile on:配置on讓sendfile發揮做用,將文件的回寫過程交給數據緩衝去去完成,而不是放在應用中完成,這樣的話在性能提高有有好處

tc_nopush on:讓nginx在一個數據包中發送全部的頭文件,而不是一個一個單獨發

tcp_nodelay on:讓nginx不要緩存數據,而是一段一段發送,若是數據的傳輸有實時性的要求的話能夠配置它,發送完一小段數據就馬上能獲得返回值,可是不要濫用哦

keepalive_timeout 10:給客戶端分配鏈接超時時間,服務器會在這個時間事後關閉鏈接。通常設置時間較短,可讓nginx工做持續性更好

client_header_timeout 10:設置請求頭的超時時間

client_body_timeout 10:設置請求體的超時時間

send_timeout 10:指定客戶端響應超時時間,若是客戶端兩次操做間隔超過這個時間,服務器就會關閉這個連接

limit_conn_zone $binary_remote_addr zone=addr:5m :設置用於保存各類key的共享內存的參數,
limit_conn addr 100: 給定的key設置最大鏈接數

server_tokens:雖然不會讓nginx執行速度更快,可是能夠在錯誤頁面關閉nginx版本提示,對於網站安全性的提高有好處哦

include /etc/nginx/mime.types:指定在當前文件中包含另外一個文件的指令

default_type application/octet-stream:指定默認處理的文件類型能夠是二進制

type_hash_max_size 2048:混淆數據,影響三列衝突率,值越大消耗內存越多,散列key衝突率會下降,檢索速度更快;值越小key,佔用內存較少,衝突率越高,檢索速度變慢

2) 日誌配置

access_log logs/access.log:設置存儲訪問記錄的日誌

error_log logs/error.log:設置存儲記錄錯誤發生的日誌

3) SSL證書加密

ssl_protocols:指令用於啓動特定的加密協議,nginx在1.1.13和1.0.12版本後默認是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1與TLSv1.2要確保OpenSSL >= 1.0.1 ,SSLv3 如今還有不少地方在用但有很多被攻擊的漏洞。

ssl prefer server ciphers:設置協商加密算法時,優先使用咱們服務端的加密套件,而不是客戶端瀏覽器的加密套件

4) 壓縮配置

gzip 是告訴nginx採用gzip壓縮的形式發送數據。這將會減小咱們發送的數據量

gzip_disable 爲指定的客戶端禁用gzip功能。咱們設置成IE6或者更低版本以使咱們的方案可以普遍兼容。

gzip_static 告訴nginx在壓縮資源以前,先查找是否有預先gzip處理過的資源。這要求你預先壓縮你的文件(在這個例子中被註釋掉了),從而容許你使用最高壓縮比,這樣nginx就不用再壓縮這些文件了(想要更詳盡的gzip_static的信息,請點擊這裏)。

gzip_proxied 容許或者禁止壓縮基於請求和響應的響應流。咱們設置爲any,意味着將會壓縮全部的請求。

gzip_min_length 設置對數據啓用壓縮的最少字節數。若是一個請求小於1000字節,咱們最好不要壓縮它,由於壓縮這些小的數據會下降處理此請求的全部進程的速度。

gzip_comp_level 設置數據的壓縮等級。這個等級能夠是1-9之間的任意數值,9是最慢可是壓縮比最大的。咱們設置爲4,這是一個比較折中的設置。

gzip_type 設置須要壓縮的數據格式。上面例子中已經有一些了,你也能夠再添加更多的格式。

5) 文件緩存配置

open_file_cache 打開緩存的同時也指定了緩存最大數目,以及緩存的時間。咱們能夠設置一個相對高的最大時間,這樣咱們能夠在它們不活動超過20秒後清除掉。

open_file_cache_valid 在open_file_cache中指定檢測正確信息的間隔時間。

open_file_cache_min_uses 定義了open_file_cache中指令參數不活動時間期間裏最小的文件數。

open_file_cache_errors 指定了當搜索一個文件時是否緩存錯誤信息,也包括再次給配置中添加文
件。咱們也包括了服務器模塊,這些是在不一樣文件中定義的。若是你的服務器模塊不在這些位置,你就得修改這一行來指定正確的位置。

 

server:用於進行服務器訪問信息的配置

srever模塊配置是http模塊中的一個子模塊,用來定義一個虛擬訪問主機,也就是一個虛擬服務器的配置信息

server {
  listen 80;
  server_name localhost 192.168.1.100;
  root /nginx/www;
  index index.php index.html index.html;
  charset utf-8;
  access_log logs/access.log;
  error_log logs/error.log;
  ......
}

server:一個虛擬主機的配置,一個http中能夠配置多個server

server_name:用力啊指定ip地址或者域名,多個配置之間用空格分隔

root:表示整個server虛擬主機內的根目錄,全部當前主機中web項目的根目錄

index:用戶訪問web網站時的全局首頁

charset:用於設置www/路徑中配置的網頁的默認編碼格式

access_log:用於指定該虛擬主機服務器中的訪問記錄日誌存放路徑

error_log:用於指定該虛擬主機服務器中訪問錯誤日誌的存放路徑

 

location:用於進行訪問路由的配置

location模塊是nginx配置中出現最多的一個配置,主要用於配置路由訪問信息在路由訪問信息配置中關聯到反向代理、負載均衡等等各項功能,因此location模塊也是一個很是重要的配置模塊

location / {
  root /nginx/www;
  index index.php index.html index.htm;
}

location /:表示匹配訪問根目錄

root:用於指定訪問根目錄時,訪問虛擬主機的web目錄

index:在不指定訪問具體資源時,默認展現的資源文件列表

 

 

location /api {
            proxy_pass http://www.baidu.com;
            #如下是一些反向代理的配置可刪除
            proxy_redirect     off; 
            #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP
            proxy_set_header   Host $host; 
            proxy_set_header   X-Real-IP $remote_addr; 
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
            client_max_body_size       10m; #容許客戶端請求的最大單文件字節數
            client_body_buffer_size    128k; #緩衝區代理緩衝用戶端請求的最大字節數
            proxy_connect_timeout      300; #nginx跟後端服務器鏈接超時時間(代理鏈接超時)
            proxy_send_timeout         300; #後端服務器數據回傳時間(代理髮送超時)
            proxy_read_timeout         300; #鏈接成功後,後端服務器響應時間(代理接收超時)
            proxy_buffer_size          4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
            proxy_buffers              4 32k; #proxy_buffers緩衝區,網頁平均在32k如下的話,這樣設置
            proxy_busy_buffers_size    64k; #高負荷下緩衝大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳
    }

 

upstream:用於進行負載均衡的配置

upstream模塊主要負責負載均衡的配置,經過默認的輪詢調度方式來分發請求到後端服務器

  upstream name {
    ip_hash;
    server 192.168.1.100:8000;
    server 192.168.1.100:8001 down;
    server 192.168.1.100:8002 max_fails=3;
    server 192.168.1.100:8003 fail_timeout=20s;
    server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
  }

 

ip_hash:指定請求調度算法,默認是weight權重輪詢調度,能夠指定
server host:port:分發服務器的列表配置
-- down:表示該主機暫停服務
-- max_fails:表示失敗最大次數,超過失敗最大次數暫停服務
-- fail_timeout:表示若是請求受理失敗,暫停指定的時間以後從新發起請求

 

 

 4、跨域代理

在http這個配置項的下面找到server這個配置項,咱們在server中實現跨域代理

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

 

上面這個配置的意思是  當訪問location 下面的/demo 路徑的時候 找到根文件加(root html),訪問根文件夾下面的index.html

 

 

咱們能夠按照這個例子來進行跨域代理

 

 

proxy_pass http://www.baidu.com/api;
請求轉向backend定義的服務器列表,即反向代理

 

proxy_redirect off;
當上遊服務器返回的響應是重定向或刷新請求(如HTTP響應碼是301或者302)時,proxy_redirect能夠重設HTTP頭部的location或refresh字段。

 

proxy_set_header Host $host;

若是不想改變請求頭「Host」的值,能夠這樣來設置
proxy_set_header Host $http_host;

若是客戶端請求頭中沒有攜帶這個頭部,那麼傳遞到後端服務器的請求也不含這個頭部。 這種狀況下,更好的方式是使用$host變量——它的值在請求包含「Host」請求頭時爲「Host」字段的值,在請求未攜帶「Host」請求頭時爲虛擬主機的主域
proxy_set_header Host $host;

服務器名能夠和後端服務器的端口一塊兒傳送
proxy_set_header Host $host:$proxy_port;

若是某個請求頭的值爲空,那麼這個請求頭將不會傳送給後端服務器:
proxy_set_header Accept-Encoding "";

其中host不帶端口的,也就是nginx部署的主機ip,而$http_host是帶端口的

 

 

proxy_set_header X-Real-IP $remote_addr;

#經過$remote_addr變量拿到的將是反向代理服務器的ip地址 X-Real-IP 是一個自定義的變量名,名字能夠隨意取,實際上要得到用戶的真實ip,不是隻有這一個方法下面這個方法也能夠進行IP的獲取

 

 

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

咱們先看看這裏有個X-Forwarded-For變量,這是一個squid開發的,用於識別經過HTTP代理或負載平衡器原始IP一個鏈接到Web服務器的客戶機地址的非rfc標準,若是有作X-Forwarded-For設置的話,每次通過proxy轉發都會有記錄,格式就是client1, proxy1, proxy2,以逗號隔開各個地址,因爲他是非rfc標準,因此默認是沒有的,須要強制添加,在默認狀況下通過proxy轉發的請求,在後端看來遠程地址都是proxy端的ip 。也就是說在默認狀況下咱們使用request.getAttribute("X-Forwarded-For")獲取不到用戶的ip,若是咱們想要經過這個變量得到用戶的ip,咱們須要本身在nginx添加以下配置:

 

意思是增長一個$proxy_add_x_forwarded_for到X-Forwarded-For裏去,注意是增長,而不是覆蓋,固然因爲默認的X-Forwarded-For值是空的,因此咱們總感受X-Forwarded-For的值就等於$proxy_add_x_forwarded_for的值,實際上當你搭建兩臺nginx在不一樣的ip上,而且都使用了這段配置,那你會發如今web服務器端經過request.getAttribute("X-Forwarded-For")得到的將會是客戶端ip和第一臺nginx的ip。

 

 

那麼$proxy_add_x_forwarded_for又是什麼?
$proxy_add_x_forwarded_for變量包含客戶端請求頭中的"X-Forwarded-For",與$remote_addr兩部分,他們之間用逗號分開。
舉個例子,有一個web應用,在它以前經過了兩個nginx轉發,www.linuxidc.com 即用戶訪問該web經過兩臺nginx。

 

 

在第一臺nginx中,使用
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
如今的$proxy_add_x_forwarded_for變量的"X-Forwarded-For"部分是空的,因此只有$remote_addr,而$remote_addr的值是用戶的ip,因而賦值之後,X-Forwarded-For變量的值就是用戶的真實的ip地址了。

 

 

到了第二臺nginx,使用
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
如今的$proxy_add_x_forwarded_for變量,X-Forwarded-For部分包含的是用戶的真實ip,$remote_addr部分的值是上一臺nginx的ip地址,因而經過這個賦值之後如今的X-Forwarded-For的值就變成了「用戶的真實ip,第一臺nginx的ip」,這樣就清楚了吧。
最後咱們看到還有一個$http_x_forwarded_for變量,這個變量就是X-Forwarded-For,因爲以前咱們說了,默認的這個X-Forwarded-For是爲空的,因此當咱們直接使用proxy_set_header X-Forwarded-For $http_x_forwarded_for時會發現,web服務器端使用request.getAttribute("X-Forwarded-For")得到的值是null。若是想要經過request.getAttribute("X-Forwarded-For")得到用戶ip,就必須先使用proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;這樣就能夠得到用戶真實ip。

 

5、nginx基本命令

3、nginx基本命令 強制中止nginx服務器,若是有未處理的數據,丟棄 nginx -s stop 中止nginx服務器,若是有未處理的數據,等待處理完成以後中止 nginx -s quit 重啓nginx服務器 nginx -s reload
相關文章
相關標籤/搜索