1、配置Nginx隱藏版本號javascript
查看頭部信息:curl -I http://192.168.200.114css
一、修改源碼包(在安裝以前)html
若是裝完了nginx先卸掉,步驟以下:java
[root@localhost ~]# killall -9 nginx
[root@localhost ~]# rm -rf /usr/local/nginx/
[root@localhost ~]# cd /usr/src/nginx-1.16.1/
[root@localhost nginx-1.16.1]# make clean
rm -rf Makefile objs
[root@localhost nginx-1.16.1]# rm -rf /usr/src/nginx-1.16.1/linux
正式的步驟:nginx
[root@localhost ~]# tar xf nginx-1.16.1.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/nginx-1.16.1/
[root@localhost nginx-1.16.1]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[root@localhost nginx-1.16.1]# vim src/core/nginx.hweb
[root@localhost nginx-1.16.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module && make && make installsql
二、修改配置文件vim
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf瀏覽器
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# killall -HUP nginx
補充:LNMP:Linux Nginx Mysql Php
LAMP:Linux Apache Mysql Php
WAMP:Windows Apache Mysql Php
LNMMP:LNMP:Linux Nginx Mysql Memcached Php
LNMT:Linux Nginx Mysql Tomcat
2、修改Nginx 的用戶和組
兩種方式:在安裝時直接--user=nginx/--group=nginx
或安裝以後 在配置文件裏修改
若是不去修改用戶和組的話nginx默認是一個低級權限的用戶的身份(nobody)來運行的,它對系統的資源以及文件的管控是有限制的。
一、[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost nginx-1.16.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module && make && make install
二、[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# killall -HUP nginx
[root@localhost ~]# ps uax | grep nginx
root 42587 0.0 0.1 48084 1980 ? Ss 15:26 0:00 nginx: master process nginx
nginx 43272 0.0 0.3 51908 3436 ? S 16:26 0:00 nginx: worker process
nginx 43273 0.0 0.3 51908 3436 ? S 16:26 0:00 nginx: worker process
root 43279 0.0 0.0 112656 972 pts/2 R+ 16:26 0:00 grep --color=auto nginx
3、配置Nginx網頁緩存時間
當Nginx將網頁數據返貨給客戶端後,可設置資源在客戶端的緩存的時間,以方便客戶端在往後進行相同內容的請求時直接返回,以免重複請求,加快了訪問的速度,通常針對靜態網頁進行設置,對動態網頁不可設置緩存時間,可在Windows客戶端中使用fiddier查看網頁緩存時間。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
測試:如今網上下載一個圖片linux.jpg
[root@localhost ~]# cd /usr/local/nginx/html/
[root@localhost html]# rz -E
rz waiting to receive.
[root@localhost html]# vim index.html
[root@localhost html]# killall -HUP nginx
4、實現Ngnix日誌的切割(腳本)
[root@localhost ~]# tail -f /usr/local/nginx/logs/access.log 這是Nginx的一個日誌
#!/bin/bash
#cut_nginx_log.sh
[root@localhost ~]# vim /opt/cut_nginx_log.sh
添加如下內容:
datetime=$(date -d "-1 day" "+%Y%m%d")
log_path="/usr/local/nginx/logs"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $log_path/backup ] || mkdir -p $log_path/backup
if [ -f $pid_path ]
then
mv $log_path/access.log $log_path/backup/access.log-$datetime
kill -USR1(它會給進程傳遞一個信號:建立一個新的日誌) $(cat $pid_path)
find $log_path/backup -mtime +30 | xargs rm -f(只保留近30天的日誌)
else
echo " Error,Nginx is not working!" | tee -a /var/log/massages
fi
[root@localhost ~]# chmod +x /opt/cut_nginx_log.sh
[root@localhost ~]# /opt/cut_nginx_log.sh
[root@localhost ~]# ls /usr/local/nginx/logs/backup/
access.log-20190915
生成了一個新的日誌
[root@localhost ~]# cat /usr/local/nginx/logs/access.log 裏面是空的,由於是新產生的
[root@localhost ~]# tail -f /usr/local/nginx/logs/access.log
[root@localhost ~]# killall -9 nginx //把nginx關掉
[root@localhost ~]# rm -rf /usr/local/nginx/logs/nginx.pid //把pid文件刪除
[root@localhost ~]# /opt/cut_nginx_log.sh //在執行一遍就報錯了
Error,Nginx is not working!
而且這個信息還會保存到 /var/log/massages下
作一個週期性的計劃任務:分時日月周
[root@localhost ~]# crontab -e
5、配置Nginx鏈接超時
在企業網站中,爲了不同一個客戶長時間佔用鏈接,形成服務資源浪費,能夠設置相應的鏈接超時參數,實現控制鏈接訪問時間。
keepalive_timeout 65; //保持的鏈接時間,默認爲65秒
client_header_timeout 60; //設置客戶端的等待的請求頭的時間
client_body_timeout 60; //等待客戶端的主體
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# nginx
[root@localhost ~]# killall -HUP nginx
6、更改Nginx運行的進程數量
修改配置文件的worker_processes參數,通常設置爲CPU的個數或者倍數
7、配置Nginx實現網頁壓縮功能
用戶訪問網站時就是在網站上下載資源
Nginx的ngx_http_gzip_module壓縮模塊提供了對文件內容壓縮的功能,容許nginx服務區將輸出內容發送到客戶端之間進行壓縮,以節約網站貸款,提高用戶的訪問體驗,模塊默認以安裝。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
添加如下內容:
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss;
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# killall -HUP nginx
8、配置Nginx實現防盜鏈功能
再開一個虛擬機192.168.200.115,安裝Nginx
115想要盜取114的圖片
複製114的圖片地址:http://192.168.200.114/linux.jpg
需修改配置文件:[root@localhost ~]# vim /usr/local/nginx/html/index.html
開始防盜:
配置說明:valid referers 設置信任的網站
none 瀏覽器在訪問時有一個referer,告訴瀏覽器我是從那個頁面的連接過來的,服務器基此可得到一些信息用於處理
blocked referer不爲空的狀況,用戶直接訪問圖片
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
添加如下內容:
location ~* \.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
valid_referers none blocked *.source.com source.com;
if ($valid_referers) {
rewrite ^/ http://www.source.com/error.jpg;
}
}
[root@localhost ~]# vim /usr/local/nginx/html/error.txt
[root@localhost ~]# killall -HUP nginx
去115的網頁強制刷新(Ctrl+F5)
9、對FPM模塊進行參數優化
Nginx的PHP解析功能實現若是是交由FPM(fastcgi 進程管理器)處理的,爲了提升PHP的處理速度。能夠對FPM模塊進行參數跳轉
Ngingx是經過FPM調用的PHP
FPM優化參數:
pm:使用哪一種方法啓動fpm進程,能夠說是static和dynamic。前者將產生固定數量的fpm進程,後者將以動態的方式產生fpm進程。
pm.max_children:static方式下開啓的fpm進程數
pm.start_servers:動態方式下初始的fpm進程數量
pm.min_spare_servers:動態方式下最小的fpm空閒進程數
pm.max_spare_servers:動態方式下最大的fpm空閒進程數
注:以上的調整要根據服務器的內存與服務器的負載進行調整
10、Ngingx爲目錄添加訪問控制
一、用戶訪問控制
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
在配置文件裏添加如下內容
location /admin {
stub_status on;
access_log off;
}
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# killall -HUP nginx
若是誰均可以金的話就不安全,因此要作一些限制
[root@localhost ~]# yum -y install httpd-tools
[root@localhost ~]# which htpasswd
/usr/bin/htpasswd
第一次建立須要用-c,以後就不用了,由於若是一直有-c就一直只有一個用戶,它會刷新重建
[root@localhost ~]# htpasswd -c /usr/local/nginx/conf/.user lty
New password:
Re-type new password:
Adding password for user lty
[root@localhost ~]# cat /usr/local/nginx/conf/.user
lty:$apr1$PdqILTOU$MyDqX6OgHAJLilDq4m7oN/
basic:是一種認證方式,其實有兩種認證方式:基本(基準)認證,摘要認證
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
添加內容:
auth_basic "Nginx Status";
auth_basic_user_file /usr/local/nginx/conf/.user;
二、客戶端地址訪問控制
在配置文件中添加 allow 192.168.200.0/24;就是容許200網段的客戶端訪問
deny 192.168.200.0/24;就是拒絕訪問
11、自定義錯誤頁面
[root@localhost ~]# cd /usr/local/nginx/html/
[root@localhost html]# rz -E
rz waiting to receive.
[root@localhost html]# vim 40x.html 在裏面寫入:
<img src="error.jpg" />
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
error_page 401 403 404 408 /40x.html;
location = /40x.html {
root html;
}
[root@localhost html]# killall -HUP nginx
12、自動索引
[root@localhost ~]# cd -
/usr/local/nginx/html
[root@localhost html]# mkdir mirrors
[root@localhost html]# cd mirrors
[root@localhost mirrors]# mkdir {3..7}.{1..9}
[root@localhost mirrors]# ls
3.1 3.4 3.7 4.1 4.4 4.7 5.1 5.4 5.7 6.1 6.4 6.7 7.1 7.4 7.7
3.2 3.5 3.8 4.2 4.5 4.8 5.2 5.5 5.8 6.2 6.5 6.8 7.2 7.5 7.8
3.3 3.6 3.9 4.3 4.6 4.9 5.3 5.6 5.9 6.3 6.6 6.9 7.3 7.6 7.9
[root@localhost mirrors]# cd 7.9
[root@localhost 7.9]# ls
[root@localhost 7.9]# touch CentOS7.9.iso
[root@localhost 7.9]# cd
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf 添加內容:
location /mirrors {
autoindex on;
}
十3、目錄別名功能
十4、經過UA實現手機端和電腦端的分離
實現nginx區分pc和手機訪問不一樣的網站,是物理上徹底隔離的兩套網站(一套移動端,一套pc端)這樣帶來的好處是pc端和移動端的內容能夠不同,移動版網站不須要包含特別多的內容,只要包含必要的文字和較小的圖片,這樣會更節省流量,有好處固然也會增長困難,難題就是你須要維護兩套設備,而且須要自動識別出來用戶的物理設備並跳轉到相應的網站,當判斷錯誤時,用戶能夠手動切換回正確的網站。
十5、nginx平滑升級版本
一、平滑升級概述
隨着網站併發訪問量愈來愈高,nginx web服務器也愈來愈流行,nginx換代愈來愈頻繁,1.15.2版本的nginx更新了許多的新功能,生產環境中版本升級是必然的,可是線上業務不能停,此時nginx升級就是運維的重要的工做了。
二、nginx平滑升級原理
多進程模式下的請求分配方式
Nginx默認工做在多進程模式下,即主進程(master process)啓動後完成配置加線和端口綁定等工做,fork出指定數量的工做進程(worker process),這些子進程會持有監聽端口的文件描述符(fd)並經過在該描述上添加監聽事件來接受鏈接(accept)。
信號的接受和處理
Nginx主進程在啓動完成後會進入等待的狀態,負責相應各種系統消息,如:SIGCHLD、SIGHP、SIGUSR2等。
Nginx信號簡介
主進程支持的信號:
TIME INT:馬上退出
QUIT:等待工做進程結束後再退出
KILL:強制終止進程
HUP:從新加載配置文件,使用新的配置啓動工做進程,逐步關閉舊的進程
USR1:從新打開日誌文件
USR2:啓動新的主進程,實現熱升級
WINCH:逐步關閉工做進程
首先查看一下執行安裝的命令
[root@localhost ~]# nginx -V
nginx version: Apache/9.6.24
built by gcc 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module
爲了保證明驗順利,先殺死,再開
[root@localhost ~]# killall -9 nginx
[root@localhost ~]# nginx
[root@localhost ~]# tar xf nginx-1.16.1.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/nginx-1.16.1/
[root@localhost nginx-1.16.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module && make(不加make install,這樣文件生成了就尚未放在指定的位置上)
三、備份二進制文件,用新版本的替換
[root@localhost nginx-1.16.1]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx old 把1.15版本的備份更名爲old
[root@localhost nginx-1.16.1]# cp objs/nginx /usr/local/nginx/sbin/ 把1.16版本的拷進去,這樣裏面新舊版本都有了
四、確保配置文件無報錯
[root@localhost nginx-1.16.1]# nginx -t 新的程序加載舊的配置文件看看有沒有問題
五、發送USR2信息
[root@localhost ~]# ps ax | grep nginx
[root@localhost ~]# kill USR2 50882
[root@localhost ~]# ps ax | grep nginx
完成!!!
六、發送WINCH信號
[root@localhost ~]# kill WINCH 50882 舊的工做進程逐步退出
注:回滾步驟,發送HUP信號
七、發送QUIT信號
[root@localhost ~]# kill QUIT 50882
結束!!!
十6、查看CPU相關信息
一、查看CPU型號
[root@localhost ~]# grep "model name" /proc/cpuinfo | uniq
[root@localhost ~]# grep 'physical id' /proc/cpuinfo
二、查看物理CPU個數
[root@localhost ~]# grep 'physical id' /proc/cpuinfo | uniq | ec -l
三、查看CPU核心數
grep 'core id' /proc/cpuinfo | sort -u | wc -l
四、查看CPU線程數
grep 'processor' /proc/cpuinfo | sort -u | wc -l