一、Nginx的安裝與配置
創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為大方企業(yè)提供專業(yè)的成都網(wǎng)站制作、做網(wǎng)站,大方網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。1、從官網(wǎng)下載nginx及其組件purge(用于清除指定URL緩存)
wget http://nginx.org/download/nginx-1.9.8.tar.gz
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
下載后分別進(jìn)行解壓:
tar -zxvf nginx-1.9.8.tar.gz;
tar -zxvf ngx_cache_purge-2.3.tar.gz;
2、設(shè)置配置信息,在解壓的nginx-1.9.8文件夾下執(zhí)行:
./configure --user=www --group=www --prefix=/usr/local/nginx --with-pcre=/usr/local/temp/pcre-8.37 --add-module=/usr/local/ngx_cache_purge
配置后執(zhí)行(編譯+安裝) make && make install,過程中可能出現(xiàn)以下錯誤:(需要依賴其他安裝包)
(1)執(zhí)行后可能報錯:checking for OS
+ Linux 2.6.32-358.el6.x86_64 x86_64
checking for C compiler ... not found
./configure: error: C compiler cc is not found
缺少GC,執(zhí)行yum install gcc
(2)又報錯了:
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=
是由于缺少PCRE library 這個是HTTP Rewrite 模塊,也即是url靜態(tài)化的包
可上傳pcre-8.37.tar.gz。 從官網(wǎng) http://exim.mirror.fr/pcre/ 上下載 pcre-8.37.tar.gz
#tar -zxvf pcre-8.37.tar.gz
#cd pcre-8.37
#./configure
#make
#make install
(3)
./configure: error: the HTTP gzip module requires the zlib library.You can either disable the module by using –without-http_gzip_moduleoption, or install the zlib library into the system, or build the zlib
librarystatically from the source with nginx by using –with-zlib=
則需要安裝“zlib-devel”即可。SSH執(zhí)行以下命令:
yum install -y zlib-devel
(4)在上述的#./configure時候有報錯了:
configure: error: You need a C++ compiler for C++ support.
執(zhí)行yum install -y gcc gcc-c++
完成上述錯誤解決后,就可以繼續(xù):
3、nginx安裝成功后的安裝目錄為/usr/local/nginx
在conf文件夾中新建proxy.conf,用于配置一些代理參數(shù),內(nèi)容如下:
#!nginx (-)
# proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #獲取真實ip
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #獲取代理者的真實ip
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
~~~~~~~~~~~~~~以下為配置文件內(nèi)容解釋~~~~~~~~~~~~~~~~~~~
nginx.conf中一些代理參數(shù),內(nèi)容如下:
#定義Nginx運(yùn)行的用戶和用戶組
user www www;
#nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù)。
worker_processes 8;
#全局錯誤日志定義類型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info;
#進(jìn)程文件
pid /var/run/nginx.pid;
#一個nginx進(jìn)程打開的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開文件數(shù)(系統(tǒng)的值ulimit -n)與nginx進(jìn)程數(shù)相除,但是nginx分配請求并不均勻,所以建議與ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
#工作模式與連接數(shù)上限
events
{
#參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內(nèi)核中的高性能網(wǎng)絡(luò)I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;
#單個進(jìn)程連接數(shù)(連接數(shù)=連接數(shù)*進(jìn)程數(shù))
worker_connections 65535;
}
#設(shè)定http服務(wù)器
http
{
include mime.types; #文件擴(kuò)展名與文件類型映射表
default_type application/octet-stream; #默認(rèn)文件類型
#charset utf-8; #默認(rèn)編碼
server_names_hash_bucket_size 128; #服務(wù)器名字的hash表大小
client_header_buffer_size 32k; #上傳文件大小限制
large_client_header_buffers 4 64k; #設(shè)定請求緩
client_max_body_size 8m; #設(shè)定請求緩
sendfile on; #開啟高效文件傳輸模式,sendfile指令指定nginx是否調(diào)用sendfile函數(shù)來輸出文件,對于普通應(yīng)用設(shè)為 on,如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的負(fù)載。注意:如果圖片顯示不正常把這個改 成off。
autoindex on; #開啟目錄列表訪問,合適下載服務(wù)器,默認(rèn)關(guān)閉。
tcp_nopush on; #防止網(wǎng)絡(luò)阻塞
tcp_nodelay on; #防止網(wǎng)絡(luò)阻塞
keepalive_timeout 120; #長連接超時時間,單位是秒
#FastCGI相關(guān)參數(shù)是為了改善網(wǎng)站的性能:減少資源占用,提高訪問速度。下面參數(shù)看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#gzip模塊設(shè)置
gzip on; #開啟gzip壓縮輸出
gzip_min_length 1k; #最小壓縮文件大小
gzip_buffers 4 16k; #壓縮緩沖區(qū)
gzip_http_version 1.0; #壓縮版本(默認(rèn)1.1,前端如果是squid2.5請使用1.0)
gzip_comp_level 2; #壓縮等級
gzip_types text/plain application/x-javascript text/css application/xml;
#壓縮類型,默認(rèn)就已經(jīng)包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #開啟限制IP連接數(shù)的時候需要使用
upstream blog.ha97.com {
#upstream的負(fù)載均衡,weight是權(quán)重,可以根據(jù)機(jī)器配置定義權(quán)重。weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大。
server 192.168.80.121:80 weight=3;
server 192.168.80.122:80 weight=2;
server 192.168.80.123:80 weight=3;
}
#虛擬主機(jī)的配置
server
{
#監(jiān)聽端口
listen 80;
#域名可以有多個,用空格隔開
server_name www.ha97.com ha97.com;
index index.html index.htm index.php;
root /data/www/ha97;
location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
#圖片緩存時間設(shè)置
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 10d;
}
#JS和CSS緩存時間設(shè)置
location ~ .*.(js|css)?$
{
expires 1h;
}
#日志格式設(shè)定
log_format access \'$remote_addr - $remote_user [$time_local] "$request" \'
\'$status $body_bytes_sent "$http_referer" \'
\'"$http_user_agent" $http_x_forwarded_for\';
#定義本虛擬主機(jī)的訪問日志
access_log /var/log/nginx/ha97access.log access;
#對 "/" 啟用反向代理
location / {
proxy_pass http://127.0.0.1:88;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下是一些反向代理的配置,可選。
proxy_set_header Host $host;
client_max_body_size 10m; #允許客戶端請求的單文件字節(jié)數(shù)
client_body_buffer_size 128k; #緩沖區(qū)代理緩沖用戶端請求的字節(jié)數(shù),
proxy_connect_timeout 90; #nginx跟后端服務(wù)器連接超時時間(代理連接超時)
proxy_send_timeout 90; #后端服務(wù)器數(shù)據(jù)回傳時間(代理發(fā)送超時)
proxy_read_timeout 90; #連接成功后,后端服務(wù)器響應(yīng)時間(代理接收超時)
proxy_buffer_size 4k; #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
proxy_buffers 4 32k; #proxy_buffers緩沖區(qū),網(wǎng)頁平均在32k以下的設(shè)置
proxy_busy_buffers_size 64k; #高負(fù)荷下緩沖大?。╬roxy_buffers*2)
proxy_temp_file_write_size 64k;
#設(shè)定緩存文件夾大小,大于這個值,將從upstream服務(wù)器傳
}
#設(shè)定查看Nginx狀態(tài)的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
#htpasswd文件的內(nèi)容可以用apache提供的htpasswd工具來產(chǎn)生。
}
#本地動靜分離反向代理配置
#所有jsp的頁面均交由tomcat或resin處理
location ~ .(jsp|jspx|do)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
#所有靜態(tài)文件由nginx直接讀取不經(jīng)過tomcat或resin
location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{ expires 15d; }
location ~ .*.(js|css)?$
{ expires 1h; }
}
}
~~~~~~~~~~~~~以上配置文件內(nèi)容解釋完結(jié)~~~~~~~~~~~~~~~~~~~~
4、修改/usr/local/nginx/conf/nginx.conf配置文件后,請執(zhí)行以下命令檢查配置文件是否正確:
#/usr/local/nginx/sbin/nginx -t
如果屏幕顯示以下兩行信息,說明配置文件正確:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully
如果提示unknown host,則可在服務(wù)器上執(zhí)行:ping www.baidu.com如果也是同樣提示unknown host則有兩種可能:
a、服務(wù)器沒有設(shè)置DNS服務(wù)器地址,查看/etc/resolv.conf下是否設(shè)置,若無則加上
b、防火墻攔截
5、啟動nginx的命令
#/usr/local/nginx/sbin/nginx
這時,輸入以下命令查看Nginx主進(jìn)程號:
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F \' \' \'{print $2}\'
6、停止nginx的命令
#/usr/local/nginx/sbin/nginx -s stop
【啟動過程中出現(xiàn)的錯誤匯總】:
1、/usr/local/nginx/sbin/nginx -t 校驗conf配置時出錯:
-bash: cd: /usr/local/nginx/sbin/nginx: Not a directory
檢查缺少的命令:ldd $(which /usr/local/nginx/sbin/nginx)
結(jié)果:
linux-vdso.so.1 => (0x00007fffbc8a7000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003785c00000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003788400000)
libpcre.so.1 => not found
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x000000378a800000)
libz.so.1 => /lib64/libz.so.1 (0x0000003786800000)
libc.so.6 => /lib64/libc.so.6 (0x0000003785400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003785000000)
libfreebl3.so => /lib64/libfreebl3.so (0x0000003788c00000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003785800000)
解決:ln -s /usr/local/lib/libpcre.so.1 /lib64
再次執(zhí)行結(jié)果:
linux-vdso.so.1 => (0x00007fff899ff000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003785c00000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003788400000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f909decd000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x000000378a800000)
libz.so.1 => /lib64/libz.so.1 (0x0000003786800000)
libc.so.6 => /lib64/libc.so.6 (0x0000003785400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003785000000)
libfreebl3.so => /lib64/libfreebl3.so (0x0000003788c00000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003785800000)
另外也會報錯:error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory,意思是找不到libpcre.so.1這個模塊,而導(dǎo)致啟動失敗。
如果是32位系統(tǒng)
ln -s /usr/local/lib/libpcre.so.1 /lib
如果是64位系統(tǒng)
ln -s /usr/local/lib/libpcre.so.1 /lib64
然后在啟動nginx就OK了
/usr/local/webserver/nginx/sbin/nginx
2、[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
是nginx重復(fù)重啟。自己占用了端口。 解決 方法 killall -9 nginx 殺掉nginx 進(jìn)程 然后重啟就行了。 service nginx restart
3、常用命令:
/usr/local/nginx/sbin/nginx -參數(shù)
-c :使用指定的配置文件而不是 conf 目錄下的 nginx.conf 。
-t:測試配置文件是否正確,在運(yùn)行時需要重新加載配置的時候,此命令非常重要,用來檢測所修改的配置文件是否有語法錯誤。
-s reload 重載
-s stop 停止
二、purge組件的使用:
在上述安裝nginx過程中,第2步配置信息的時候已經(jīng)配置了--add-module=/usr/local/ngx_cache_purge,則只需要在nginx/conf/nginx.conf配置。
~~~~~~~~~~~~~~以下為配置文件內(nèi)容示例~~~~~~~~~~~~~~~~~
user www www;
worker_processes 24;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
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" $upstream_cache_status $request_time\';
proxy_cache_path /usr/local/nginx/cache keys_zone=cache1:100m inactive=1d max_size=10g;
access_log logs/access.log main;
error_log logs/error.log debug;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
client_max_body_size 2M;
#gzip on;
upstream quroot{
server 127.0.0.1:8080;
server 127.0.0.1:8090;
}
upstream quservice{
#server 127.0.0.1:8081;
server 139.196.198.62:8081;
}
upstream qucms{
server 127.0.0.1:8086;
}
server {
listen 80;
server_name www.baidu.com;
index index.jsp;
location ~ /purge(/.*) {
allow all;
proxy_cache_purge cache1 $host$1$is_args$args;
}
location /quservice/ {
proxy_pass http://quservice;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /quapp/ {
proxy_pass http://quroot;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /qucms/ {
proxy_pass http://qucms;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ /(qu$) {
rewrite ^/(.*)$ http://www.baidu.com;
}
location =/html/scamp/ {
root /usr/local/tomcat/static/html/scamp/join.html;
}
location ~ /(html|pic|video|video_minicar|tool|poi|apk)/ {
root /usr/local/tomcat/static;
proxy_cache cache1;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 30m;
add_header X-Cache $upstream_cache_status;
}
location / {
add_header Access-Control-Allow-Origin *;
proxy_pass http://quroot;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
~~~~~~~~~~~~~~以上為配置文件實例完結(jié)~~~~~~~~~~~~~~~