NGINX安裝配置
1.檢查而且安裝依賴組件
檢查安裝nginx的依賴性,nginx的模塊須要第三方庫的支持,檢查是否安裝下列庫:zlib、zlib-devel、openssl、openssl-devel、prce、prce-devel若是沒有,則所有裝上
# yum install zlib zlib-devel openssl openssl-devel prce prce-devel
2.安裝pcre
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.10.tar.gz
# tar -xzvf pcre-8.10.tar.gz -C ../software/
# cd ../software/pcre-8.10/
# ./configure
# make && make install
3.安裝google-perftools
# wget http://mirror.yongbok.net/nongnu/libunwind/libunwind-0.99-alpha.tar.gz
# wget http://mirror.yongbok.net/nongnu/libunwind/libunwind-0.99-alpha.tar.gz
# tar -xzvf libunwind-0.99-alpha.tar.gz -C ../software/
# tar -xzvf google-perftools-0.98.tar.gz -C ../software/
# cd ../software/libunwind-0.99-alpha/
# ./configure
# make
# make install
# cd ../google-perftools-0.98/
# ./configure
# make && make install
4.編譯安裝NGINX
先建nginx的啓動用戶
# useradd –s /sbin/nologin nginx
# wget http://nginx.org/download/nginx-1.0.4.tar.gz
# tar -xzvf nginx-1.0.4.tar.gz -C ../software/
# cd ../software/nginx-1.0.4/
# ./configure
--with-cc-opt='-O3' \ # 注意整個不是零,是大寫英文字母O
--with-google_perftools_module \ # 可選組件
--prefix=/usr/local/nginx \ # nginx安裝目錄
--with-openssl=/usr/lib
--with-http_stub_status_module
--with-http_image_filter_module
--user=nginx
--group=nginx
# make && make install
修改一下配置:
# grep nginx /usr/local/nginx/conf/nginx.conf
user nginx nginx;
要點:禁止DEBUG模式
# vi auto/cc/gcc
# debug //註釋下面
CFLAGS="$CFLAGS -g"
5.nginx的信號控制(有關nginx的啓動與關閉)
TERM,INT 快速關閉
QUIT 從容關閉
HUP 平滑重啓,從新加載配置文件
USR1 從新打開日誌文件,在切割日誌時用途較大;
USR2 平滑升級可執行程序
WINCH 從容關閉工做進程
咱們能夠直接經過如下命令來完成平滑重啓,省下尋找nginx主進程號的步驟;
kill -"信號類型」‘/usr/local/nginx/logs/nginx.pid'或者nginx的主進程號
(1)、從容中止nginx
kill -QUIT 6019 #nginx主進程號
kill -QUIT cat /usr/local/nginx/logs/nginx.pid
(2)、快速中止nginx
kill -TERM /INT nginx主進程號
kill -TERM /INT cat /usr/local/nginx/logs/nginx.pid
cat /usr/local/nginx/logs/nginx.pid`
(3)、強制中止全部的nginx進程
pkill -9 nginx
(4)、平滑重啓nginx
修改了nginx的配置文件要重啓nginx;重啓以前要檢查配置文件是否正確:
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful
# kill -HUP
nginx的平滑重啓
kll HUP Nginx主進程號
或者
kll HUP nginx.pid文件按存放路徑•javascript
NGINX基本配置
Nginx.conf配置文件:
//如下爲配置內容
user nginx; # 指定運行nginx的用戶和組
worker_processes 2; # 工做進程數,基本爲CPU的核心數或者兩倍
# 指定全局錯誤日誌的路徑,錯誤日誌可選項 有[debug|info|notice|warn|error|crit]
error_log logs/error.log info;
pid logs/nginx.pid; # 指定pid文件位置
events {
worker_connections 1024; # 最大鏈接數
}
http {
include mime.types; # 設定mime類型
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 on; # sendfile有效提升web文件傳輸速度
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
#站點配置
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
//定義主目錄,相似apache的DocumentRoot
location / {
root /nginx_www; # 網站根目錄
index index.html index.htm; # 默認首頁
}
error_page 404 /404.html; # 404錯誤頁面
error_page 500 502 503 504 /50x.html; # 將500錯誤轉到50x.html上
location = /50x.html { # 若是訪問的頁面等於50x.html,則從html目錄下找
root /nginx_www;
}
}
}
首先有個全局的配置
而後配置一個httpd段
httpd配置段裏面包含多個server段,也就是常說的虛擬主機
server段裏面能夠配置各個站點特有的配置php
NGINX每一個進程配置一個CPU
nginx進程設置方法, worker_processes 1;
查看CPU個數:
cat /proc/cpuinfo | grep processor
配置1:4 CPU (4 Core) + 4 worker_processes (每一個worker_processes 使用1個CPU)
orker_processes 4;
orker_cpu_affinity 0001 0010 0100 1000;
配置2:8 CPU (8 Core) + 8 worker_processes (每一個worker_processes 使用1個CPU)
orker_processes 8;
orker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
配置3:16 CPU (16 Core) + 16 worker_processes (每一個worker_processes 使用1個CPU)
orker_cpu_affinity 0000000000000001 0000000000000010 0000000000000100 0000000000001000 0000000000010000 0000000000100000 0000000001000000 0000000010000000 0000000100000000 0000001000000000 0000010000000000 0000100000000000 0001000000000000 0010000000000000 0100000000000000 1000000000000000;css
基於域名的虛擬主機配置
1.兩個站點分別爲:Web1.ttlsa.com、Web2.ttlsa.com
搭建web1主目錄、搭建web2主目錄
# mkdir /nginx_www/web1.ttlsa.com
# echo 「web1.ttlsa.com」 > /nginx_www/index.html
# mkdir /nginx_www//nginx_www/web2.ttlsa.com
# echo 「web2.ttlsa.com」 > /nginx_www/ web2.ttlsa.com/index.html
在http配置段裏增長以下配置:
server {
listen 80;
server_name web1.ttlsa.com;
location / {
root /nginx_www/web1.ttlsa.com; # 網站根目錄
index index.html index.htm; # 默認首頁
}
error_page 404 /404.html; # 404錯誤頁面
error_page 500 502 503 504 /50x.html;
}
server {
listen 80;
server_name web2.ttlsa.com;
location / {
root /nginx_www/web2.ttlsa.com; # 網站根目錄
index index.html index.htm; # 默認首頁
}
error_page 404 /404.html; # 404錯誤頁面
error_page 500 502 503 504 /50x.html;
}
2.開始作個本地測試,先要修改windows下的hosts文件,加入以下配置
C:\Windows\System32\drivers\etc\hosts
192.168.1.203 web1.ttlsa.com
192.168.1.203 web2.ttlsa.comhtml
NGINX配置文件過時時間expires
# 參數off禁止修改應答頭中的"Expires"和"Cache-Control"。
# 注意:expires僅僅適用於200, 204, 301, 302,和304應答
1.根據文件類型配置(大部分狀況下是這麼配置的)
對圖片,flash文件在瀏覽器本地緩存30天
expires on # 啓用設置expire過時時間
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
對js,css文件在瀏覽器本地緩存1小時
location ~ .*\.(js|css)$
{
expires 1h;
}
2.根據目錄來設置
location ~ ^/(image|js|static|flash)/{
root /nginx_www/down; # 匹配這些url主目錄都在down下,而且過時時間爲30
expires 30d;
}java
NGINX配置禁止訪問某類文件
1.使用break
location ~ .*\.(exe|doc|rar)$
{
if (-f $request_filename) # 注意if和(之間有個空格
{
root /nginx/x; #當名字匹配時,把網站根目錄替換成其餘目錄,使得用戶沒法下載
break; # 當名字匹配時,直接跳出不處理
}
}
範例一:假如說我有一個txt文件在web1.ttlsa.com上,我不讓別人訪問,那麼怎麼作呢?
如今目錄下建一個txt文件
# vi /nginx_www/web1.ttlsa.com/a.txt
最後修改一下nginx.conf配置,Server段配置段以下:
server{
listen 80;
server_name web1.ttlsa.com;
location / {
root /nginx_www/web1.ttlsa.com;
index index.html index.htm;
}
error_page 404 /404.html;
location ~ \.txt$ {
if (-f $request_filename)
{
#root /nginx/xxx;
break;
}
}
}
接着咱們來測試訪問,能夠看到提示404 Not Found
2.使用deny
location ~ .*\.(exe|doc|rar)$
{
root /nginx/x; #當名字匹配時,把網站根目錄替換成其餘目錄,使得用戶沒法下載
deny all;
}node
禁止訪問某個目錄
location ~ ^/(admin)/ {
deny all; # 全部訪問/admin目錄的URL都被拒絕掉
}nginx
限制某些ip訪問
location / {
deny 192.168.1.1;
deny 192.168.2.0/24;
allow all; # 上面呢兩個被拒絕,容許其餘全部的ip
}web
nginx下載鏈接數限制、速度限制
1.limit_zone
語法:limit_zone zone_name $variable memory_max_size
默認值:no
使用字段:http
指令描述會話狀態存儲區域。
會話的數目按照指定的變量來決定,它依賴於使用的變量大小和memory_max_size的值。
以下例:
limit_zone one $binary_remote_addr 10m;
客戶端的地址將用於會話,注意$binary_remote_addr變量將替換$remote_addr而被使用。
$remote_addr 變量的值的長度能夠是7到15字節,所以大小指定爲32或64字節。
$binary_remote_addr 變量的值的長度老是4字節,大小老是32字節。
當會話狀態儲存區域爲1M時理論上能夠處理32000個會話,每一個會話大小爲32字節。
2.limit_conn
語法:limit_conn zone_name max_clients_per_ip
默認值:no
使用字段:http, server, location
指令指定一個會話的最大同時鏈接數,超過這個數字的請求將被返回"Service unavailable" (503)代碼。
以下例:
limit_zone one $binary_remote_addr 10m; # 使用10MB來存儲會話,可存32w個會話
Server{
Listen 80;
Server_name download.ttlsa.com;
Index index.html index.html index.php;
#Zone limit
Location / {
limit_conn one 1; # 值容許一個鏈接
limit_rate 20k; # 一個鏈接最大20k速度
}
}
接下來咱們測試一下效果,我在web1.ttlsa.com根目錄下傳了一個飛信的安裝包,20多MB,看看速度是多少吧,接近20KB/秒.
此次把速度開到50KB,鏈接數仍是1,配置段以下
limit_conn one 1;
limit_rate 50k;
鏈接數改爲10,速率到50KB,速度應該達到250KB/秒左右了吧
limit_conn one 10;
limit_rate 50k;apache
Nginx列出目錄下的列表-目錄索引
整個站點
location / {
root /nginx/web1.ttlsa.com
autoindex on;
}
也能夠單個目錄
location / {
root /nginx/web1.ttlsa.com/list; # 要索引的目錄
autoindex on; # 打開索引
}
接下來看看整個列子,把web1.ttlsa.com的list索引目錄列出,配置以下
server{
listen 80;
server_name web1.ttlsa.com;
location / {
root /nginx_www/web1.ttlsa.com;
index index.html index.htm;
}
error_page 404 /404.html;
location /list
{
root /nginx_www/web1.ttlsa.com;
autoindex on;
默認關閉狀態
autoindex_exact_size off;
默認爲on,顯示出文件的確切大小,單位是bytes。
改成off後,顯示出文件的大概大小,單位是kB或者MB或者GB
autoindex_localtime on;
默認爲off,顯示的文件時間爲GMT時間。
改成on後,顯示的文件時間爲文件的服務器時間
}
}windows
NGINX日誌處理
設置一個計劃任務,天天12點把access.log剪切到一個目錄下,而且從命名爲響應的名字
NGINX忽略部分日誌
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
access_log off; # 列出的這些圖片格式不記錄日誌
}
NGINX反向代理配置
nginx.conf配置文件:
user nobody nobody;
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
http {
server_tokens off;
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
upstream mysrv {
server 192.168.1.1:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.2:80 weight=1 max_fails=2 fail_timeout=30s;
}
upstream bench {
server 192.168.1.3:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.4:80 weight=1 max_fails=2 fail_timeout=30s;
}
upstream bbs {
server 192.168.1.5:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.6:80 weight=1 max_fails=2 fail_timeout=30s;
}
include vhost/*.conf;
}
aaa_example_com.conf配置文件:
server
{
listen 80;
server_name aaa.example.com;
index index.php index.html index.htm index.shtml;
log_format proxy '$remote_addr| $upstream_addr| $connection| $upstream_status| $time_local| $request|'
'$status| $body_bytes_sent| $bytes_sent| $http_referer|'
' $http_user_agent| $upstream_response_time| $msec| $request_time';
access_log logs/aaa_access.log proxy;
location /
{
proxy_pass http://mysrv; # 當訪問aaa.example.com,默認解析轉發到後端的mysrv
include proxy.conf;
}
location /bench/
{
proxy_pass http://bench; #當訪問/bench/轉發到upstream配置的bench下
I nclude proxy.conf;
}
}
bbs_example_com.conf配置文件:
server
{
listen 80;
server_name bbs.example.com *.bbs.example.com;
log_format proxy '$remote_addr| $upstream_addr| $connection| $upstream_status| $time_local| $request|'
' $status| $body_bytes_sent| $bytes_sent| $http_referer|'
' $http_user_agent| $upstream_response_time| $msec| $request_time';
access_log logs/bbs_access.log proxy;
location /
{
proxy_pass http://bbs;
include proxy.conf;
}
}
proxy.conf配置文件:
proxy_redirect off;
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 50m; # 容許客戶端請求的最大單個文件字節數
client_body_buffer_size 256k; # 緩衝區代理緩衝客戶端請求的最大字節數
proxy_connect_timeout 30; # 鏈接後端服務器超時時間
proxy_send_timeout 30; # 後端服務器發送數據超時時間,鏈接以及創建
proxy_read_timeout 60; # 後端服務器響應請求超時時間,從開始發送到接受完畢
proxy_buffer_size 4k; # 代理請求緩存區大小
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k; #系統繁忙時可申請的proxy_buffers大小
proxy_temp_file_write_size 64k; #proxy緩存臨時文件的大小
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
# 故障轉移
proxy_max_temp_file_size 128m;
proxy_set_header指令用於在向反向代理的後端web服務器發起請求時添加指定Header頭信息,當後端web服務器上有多個基於域名的虛擬主機時,要經過添加Header頭信息Host,來指定請求的域名,這樣後端web服務器才能識別該反向代理訪問請求由哪一個虛擬主機來處理。
Nginx緩存服務器配置
# wget http://labs.frickle.com/files/ngx_cache_purge-1.3.tar.gz //清緩存模塊
# tar zxvpf ngx_cache_purge-1.3.tar.gz -C ../software/
# cd /usr/local/src/software/nginx-1.0.2
# ./configure --user=nobody --group=nobody --prefix=/usr/local/nginx-1.0.2 --with-http_stub_status_module --with-http_ssl_module --add-module=../ngx_cache_purge-1.3
# mkdir -p /www/nginx/proxy_temp_path
# mkdir -p /www/nginx/proxy_cache_path
nginx.conf配置文件:
user nobody nobody;
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
http {
server_tokens off;
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
upstream mysrv {
server 192.168.1.1:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.2:80 weight=1 max_fails=2 fail_timeout=30s;
}
include vhost/*.conf;
}
aaa_example_com.conf配置文件:
server {
listen 80;
server_name aaa.example.com;
index index.php index.html index.htm index.shtml;
log_format proxy '$remote_addr| $upstream_addr| $connection| $upstream_status| $time_local| $request|'
' $status| $body_bytes_sent| $bytes_sent| $http_referer|'
' $http_user_agent| $upstream_response_time| $msec| $request_time';
access_log logs/aaa_access.log proxy;
location /
{
proxy_pass http://mysrv;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
proxy_pass http://mysrv;
include proxy.conf;
}
location ~ /purge(/.*)
{
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
}
proxy.conf配置文件:
proxy_redirect off;
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 50m; //容許客戶端請求的最大單個文件字節數
client_body_buffer_size 256k; //緩衝區代理緩衝客戶端請求的最大字節數
proxy_connect_timeout 30; //鏈接後端服務器超時時間
proxy_send_timeout 30; //後端服務器發送數據超時時間
proxy_read_timeout 60; //後端服務器響應請求超時時間
proxy_buffer_size 4k; //代理請求緩存區大小
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k; //系統繁忙時可申請的proxy_buffers大小
proxy_temp_file_write_size 64k; //proxy緩存臨時文件的大小
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
//故障轉移
proxy_max_temp_file_size 128m;
proxy_temp_path /www/nginx/proxy_temp_path;
proxy_cache_path /www/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=1g; //設置web緩存區名稱爲cache_one,內存緩存空間爲200m,自動清除超過1天沒有被訪問的緩存數據,硬盤緩存空間爲1g
proxy_cache cache_one; //使用web緩存區cache_one
proxy_cache_valid 200 304 12h;
proxy_cache_valid 301 302 1m;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args; //設置web緩存的key值,nginx根據key值md5哈希存儲緩存