一、安裝編譯工具及庫文件javascript
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel二、安裝PCRE庫 (目的是使nginx支持具有url重寫功能的rewrite模塊)yum install pcre pcre-devel -yphp
rpm -qa pcre pcre-devel 安裝完成後檢察安裝結果css
三、開始安裝nginxhtml
1)建立路徑下載安裝包:前端
mkdir –p /zjl/softwarejava
wget -q http://nginx.org/download/nginx-1.14.2.tar.gzlinux
ls -l nginx-1.14.2.tar.gz 查看下載後安裝包信息nginx
2)添加一個不能登陸的用戶管理nginxc++
groupadd nginxweb
useradd -s /sbin/nologin –M –g nginx nginx
3)解壓安裝包
tar -zxvf nginx-1.14.2.tar.gz
4)安裝
建立安裝目錄:mkdir –p /zjl/program
cd nginx-1.14.2
./configure --user=nginx --group=nginx --prefix=/zjl/program/nginx-1.14.2 --with-http_stub_status_module --with-http_ssl_module
make
make install
5)建立軟鏈接
ln -s /zjl/program/nginx-1.14.2/ /zjl/program/nginx
6)啓動前檢查配置文件語法
cd /zjl/program/nginx
./nginx –t
7)啓動
/zjl/program/nginx
8)重啓
/zjl/program/nginx –s reload9)查看是否啓動成功
netstat -lnt|grep 80
ps -ef|grep nginx
curl 127.0.0.1
一、如何查看nginx編譯時的參數
./nginx –V
二、訪問不了nginx 歡迎頁面
服務器端:首先關閉SELinux :
setenforce 0 #這時臨時關閉selinux的方法
永久關閉的的方法:
編輯/etc/selinux/config 而後將SELINUX=enforcing 改成 SELINUX=disabled
容許防火牆訪問80端口: -A INPUT -p tcp --dport 80 -j ACCEPT
客戶端:
ping 服務器的ip
而後telnet 10.0.0.7 80
而後模擬用戶訪問,排除http服務自身的問題
wget 10.0.0.7(curl -I 10.0.0.7)
三、修改HTTP頭信息中的connection字段,防止回顯具體版本號
vim +29 src/http/ngx_http_special_response.c
有時候咱們頁面程序出現錯誤,Nginx會代咱們返回相應的錯誤代碼,回顯的時候,會帶上nginx和版本號,咱們把他隱藏起來
static u_char ngx_http_error_full_tail[] = "<hr><center>" NGINX_VER "</center>" CRLF "</body>" CRLF "</html>" CRLF ;
修改後
static u_char ngx_http_error_tail[] = "<hr><center>LinuxprobeWeb</center>" CRLF "</body>" CRLF "</html>" CRLF
一、nginx配置文件結構
轉載自:http://www.javashuo.com/article/p-xkijqyyb-hr.html
... #全局塊 events { #events塊 ... } http #http塊 { ... #http全局塊 server #server塊 { ... #server全局塊 location [PATTERN] #location塊 { ... } location [PATTERN] { ... } } server { ... } ... #http全局塊 }一、全局塊:配置影響nginx全局的指令。通常有運行nginx服務器的用戶組,nginx進程pid存放路徑,日誌存放路徑,配置文件引入,容許生成worker process數等。
二、events塊:配置影響nginx服務器或與用戶的網絡鏈接。有每一個進程的最大鏈接數,選取哪一種事件驅動模型處理鏈接請求,是否容許同時接受多個網路鏈接,開啓多個網絡鏈接序列化等。
三、http塊:能夠嵌套多個server,配置代理,緩存,日誌定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日誌自定義,是否使用sendfile傳輸文件,鏈接超時時間,單鏈接請求數等。
四、server塊:配置虛擬主機的相關參數,一個http中能夠有多個server。
五、location塊:配置請求的路由,以及各類頁面的處理狀況。
示例:
View Code########### 每一個指令必須有分號結束。################# #user administrator administrators; #配置用戶或者組,默認爲nobody nobody。 #worker_processes 2; #容許生成的進程數,默認爲1 #pid /nginx/pid/nginx.pid; #指定nginx進程運行文件存放地址 error_log log/error.log debug; #制定日誌路徑,級別。這個設置能夠放入全局塊,http塊,server塊,級別以此爲:debug|info|notice|warn|error|crit|alert|emerg events { accept_mutex on; #設置網路鏈接序列化,防止驚羣現象發生,默認爲on multi_accept on; #設置一個進程是否同時接受多個網絡鏈接,默認爲off #use epoll; #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #最大鏈接數,默認爲512 } http { include mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream; #默認文件類型,默認爲text/plain #access_log off; #取消服務日誌 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式 access_log log/access.log myFormat; #combined爲日誌格式的默認值 sendfile on; #容許sendfile方式傳輸文件,默認爲off,能夠在http塊,server塊,location塊。 sendfile_max_chunk 100k; #每一個進程每次調用傳輸數量不能大於設定的值,默認爲0,即不設上限。 keepalive_timeout 65; #鏈接超時時間,默認爲75s,能夠在http,server,location塊。 upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #熱備 } error_page 404 https://www.baidu.com; #錯誤頁 server { keepalive_requests 120; #單鏈接請求上限次數。 listen 4545; #監聽端口 server_name 127.0.0.1; #監聽地址 location ~*^.+$ { #請求的url過濾,正則匹配,~爲區分大小寫,~*爲不區分大小寫。 #root path; #根目錄 #index vv.txt; #設置默認頁 proxy_pass http://mysvr; #請求轉向mysvr 定義的服務器列表 deny 127.0.0.1; #拒絕的ip allow 172.18.5.54; #容許的ip } } }上面是nginx的基本配置,須要注意的有如下幾點:
一、1.$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址; 2.$remote_user :用來記錄客戶端用戶名稱; 3.$time_local : 用來記錄訪問時間與時區;4.$request : 用來記錄請求的url與http協議;
5.$status : 用來記錄請求狀態;成功是200, 6.$body_bytes_s ent :記錄發送給客戶端文件主體內容大小;7.$http_referer :用來記錄從那個頁面連接訪問過來的; 8.$http_user_agent :記錄客戶端瀏覽器的相關信息;
二、驚羣現象:一個網路鏈接到來,多個睡眠的進程被同事叫醒,但只有一個進程能得到連接,這樣會影響系統性能。
三、每一個指令必須有分號結束。
二、默認配置文件:
View Codeuser nginx nginx; #管理nginx的用戶組和用戶 worker_processes 1; #worker進程的數量 error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; pid logs/nginx.pid; #前幾行爲main區,nginx的核心功能模塊 events { #envent 區,nginx核心功能模塊 worker_connections 1024; #每一個worker區塊支持的最大鏈接數 } http { #http區開始,nginx核心模塊 include mime.types; #nginx支持的媒體類型庫文件 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; #開啓高效傳輸模式 #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #鏈接超時 #gzip on; server { #server區塊 listen 80; #提供服務的端口,默認爲80 server_name www.zjl.org zjl.org; #提供服務的域名或主機地址 rewrite ^/(.*) http://www.etiantian.org/$1 permanent; #當用戶訪問zjl.org及下面的任意內容時,都會經過這條rewrite 跳轉到#www.etiantian.org對應的地址 #charset koi8-r; #access_log logs/host.access.log main; location / { #location 區塊 root html; #站點根目錄 index index.html index.htm; #默認首頁文件 } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; #對應的http狀態碼時,使用50x.html迴應客戶 location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { #新location區塊 # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #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; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #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 # #server { #新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; # } #} }
三、nginx認證配置
1)生成密碼文件:
yum install httpd –y 安裝httpd
htpasswd -bc /zjl/program/nginx/conf/htpasswd zjl zjl123 生成認證文件,用戶:zjl 密碼:zjl123
chmod 400 /zjl/program/nginx/conf/htpasswd 設置文件權限爲:全部者可讀取
chown nginx /zjl/program/nginx/conf/htpasswd 設置文件全部者爲用戶: nginx
2)nginx配置文件
配置內容爲:
auth_basic "密碼提示"; # 設置用於認證的提示字符串 auth_basic_user_file /zjl/program/nginx/conf/htpasswd; # 設置認證的密碼文件可配置的位置有:http、server、location、limit_except
四、配置nginx gzip 壓縮實現性能優化
純文本壓縮比很高,所以,純文本的內容最好進行壓縮,如html , js , css , xml , shtml等格式的文件
被壓縮的純文本要大於1kb因爲壓縮算法緣由若是極小的文件壓縮後可能更大
圖片、視頻(流媒體)文件儘可能不壓縮,由於,這些文件原本大多就已經壓縮過,再壓縮減少的不多,二來壓縮時會消耗大量的cpu、內存資源。
gzip on; #開啓gzip功能 gzip_min_length 1k; #設置容許壓縮的最小字節數 gzi_buffers 4 32k; #壓縮緩衝區的大小,表示申請4個單位爲16k的壓縮結果流緩存 gzip_http_version 1.1; #壓縮版本用於設置http協議版本,默認是1.1,使用默認便可 gzip_comp_level 9; #壓縮比率,1壓縮比最小,處理速度最快,9 壓縮比最大,傳輸速度最快也最消耗cpu資源 gzip_types text/css text/xml application/javascript;#用來指定壓縮的類型,「text/html」類型總會被壓縮; 請查看安裝目錄下的mime.types文件。 gzip_vary on; #vary header支持,該選項可讓前端 的緩存服務器緩存通過gzip壓縮的頁面,例如 用squid 緩存通過nginx壓縮的數據
五、配置nginx expires 緩存實現性能優化
該功能就是爲用戶訪問網站內容設定一個過時時間,當用戶第一次訪問網站內容時,會把這些內容存儲在用戶瀏覽器本地,這樣用戶第二次及之後繼續訪問時,瀏覽器檢查已經緩存的本地內容,就不會去服務器下載了,直到緩存內容過時或被清除爲止。
expires 能夠放在server 裏也能夠放在location裏
expires 30s; //表示把數據緩存30秒
expires 30m;//表示把數據緩存30分
expires 10h;//表示把數據緩存10小時
expires 30d; #設置過時時間爲30天
expires 3y; #設置過時時間爲3年
六、限制ip段訪問
location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; deny all; }
七、referer 防盜鏈
轉載自:https://www.jb51.net/article/107338.htm
HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,通常會帶上Referer,告訴服務器我是從哪一個頁面連接過來的,服務器藉此能夠得到一些信息用於處理。好比從我主頁上連接到一個朋友那裏,他的服務器就可以從HTTP Referer中統計出天天有多少用戶點擊我主頁上的連接訪問他的網站。
location ~* \.(gif|jpg|png|webp)$ { valid_referers none blocked domain.com *.domain.com server_names ~\.google\. ~\.baidu\.; if ($invalid_referer) { return 403; #rewrite ^/ http://www.domain.com/403.jpg; } root /opt/www/image; }以上全部來至domain.com和域名以及baidu和google的站點均可以訪問到當前站點的圖片,若是來源域名不在這個列表中,那麼$invalid_referer等於1,在if語句中返回一個403給用戶,這樣用戶便會看到一個403的頁面,若是使用下面的rewrite,那麼盜鏈的圖片都會顯示403.jpg。none規則實現了容許空referer訪問,即當直接在瀏覽器打開圖片,referer爲空時,圖片仍能正常顯示.
八、rewrite指令語法
rewrite regex replacement [flag];
如:rewrite ^/(.*)s http://www.zhangjialou.org/$1 permanent;
上述指令中,regex 部分是正則表達 式,配置成功後跳轉到 http://www.zhangjialou.org/$1 。這裏的$1 是取前面正則表達式括號裏的內容,結尾permanent;是永久301 重定向標記,
server { # 添加個server區塊作跳轉 listen 80; server_name brian.com; rewrite ^/(.*) http://www.brian.com/$1 permanent; } server { listen 80; server_name www.brian.com; location / { root html/brian; index index.html index.htm; } access_log logs/brian.log main gzip buffer=128k flush=5s; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }