Nginx安裝配置

一、安裝

一、安裝編譯工具及庫文件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 reload

9)查看是否啓動成功

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 配置文件說明

一、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塊:配置請求的路由,以及各類頁面的處理狀況。

示例:

########### 每一個指令必須有分號結束。#################
#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           
        }
    }
}
View Code

上面是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 :記錄客戶端瀏覽器的相關信息;

二、驚羣現象:一個網路鏈接到來,多個睡眠的進程被同事叫醒,但只有一個進程能得到連接,這樣會影響系統性能。

三、每一個指令必須有分號結束。

二、默認配置文件:

user  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;                                                                                                                                                  
    #    }                                                                                                                                                                                 
    #}                                                                                                                                                                                     
}
View Code

 

三、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;
    }
}
相關文章
相關標籤/搜索