Nginx网页服务
Nginx網頁服務
一、編譯安裝Nginx服務
1、關閉防火墻,將安裝Apache所需軟件包傳到/opt目錄下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
nginx-1.12.0.tar.gz
2、安裝依賴包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
3、創建運行用戶、組(Nginx 服務程序默認以 nobody 身份運行,建議為其創建專門的用戶賬號,以便更準確地控制其訪問權限)
useradd -M -s /sbin/nologin nginx
4、編譯安裝Nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure
–prefix=/usr/local/nginx \ #指定nginx的安裝路徑
–user=nginx \ #指定用戶名
–group=nginx \ #指定組名
–with-http_stub_status_module #啟用 http_stub_status_module 模塊以支持狀態統計
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #讓系統識別nginx的操作命令
5、檢查、啟動、重啟、停止 nginx服務
nginx -t #檢查配置文件是否配置正確
#啟動
nginx
#停止
cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID號
kill -3 <PID號>
kill -s QUIT <PID號>
killall -3 nginx
killall -s QUIT nginx
#重載
kill -1 <PID號>
kill -s HUP <PID號>
killall -1 nginx
killall -s HUP nginx
#日志分隔,重新打開日志文件
kill -USR1 <PID號>
#平滑升級
kill -USR2 <PID號>
6、添加 Nginx 系統服務
方法一:
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case “$1” in
start)
$COM
;;
stop)
kill -s QUIT $(cat $PID)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PID)
;;
*)
echo “Usage: $0 {start|stop|restart|reload}”
exit 1
esac
exit 0
chmod +x /etc/init.d/nginx
chkconfig --add nginx #添加為系統服務
systemctl stop nginx
systemctl start nginx
方法二:
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
二、認識Nginx服務的主配置文件 nginx.conf
vim /usr/local/nginx/conf/nginx.conf
1、全局配置
#user nobody; #運行用戶,若編譯時未指定則默認為 nobody
worker_processes 1; #工作進程數量,可配置成服務器內核數 * 2
#error_log logs/error.log; #錯誤日志文件的位置
#pid logs/nginx.pid; #PID 文件的位置
2、I/O 事件配置
events {
use epoll; #使用 epoll 模型,2.6及以上版本的系統內核,建議使用epoll模型以提高性能
worker_connections 4096; #每個進程處理 4096 個連接
}
#如提高每個進程的連接數還需執行“ulimit -n 65535”命令臨時修改本地每個進程可以同時打開的最大文件數。
#在Linux平臺上,在進行高并發TCP連接處理時,最高的并發數量都要受到系統對用戶單一進程同時可打開文件數量的限制(這是因為系統為每個TCP連接都要創建一個socket句柄,每個socket句柄同時也是一個文件句柄)。
#可使用ulimit -a命令查看系統允許當前用戶進程打開的文件數限制.
3、HTTP 配置
http {
##文件擴展名與文件類型映射表
include mime.types;
##默認文件類型
default_type application/octet-stream;
##日志格式設定
#log_format main '$remote_addr - remoteuser[remote_user [remoteu?ser[time_local] “$request” ’
'$status bodybytessent"body_bytes_sent "bodyb?ytess?ent"http_referer" ’
‘“httpuseragent""http_user_agent" "httpu?sera?gent""http_x_forwarded_for”’;
? ##訪問日志位置
? #access_log logs/access.log main;
? ##支持文件發送(下載)
? sendfile on;
? ##此選項允許或禁止使用socke的TCP_CORK的選項(發送數據包前先緩存數據),此選項僅在使用sendfile的時候使用
? #tcp_nopush on;
? ##連接保持超時時間,單位是秒
? #keepalive_timeout 0;
? keepalive_timeout 65;
? ##gzip模塊設置,設置是否開啟gzip壓縮輸出
? #gzip on;
Web 服務的監聽配置
server {
##監聽地址及端口
listen 80;
##站點域名,可以有多個,用空格隔開
server_name www.zhangsan.com;
##網頁的默認字符集
charset utf-8;
##根目錄配置
location / {
##網站根目錄的位置/usr/local/nginx/html
root html;
##默認首頁文件名
index index.html index.php;
}
##內部錯誤的反饋頁面
error_page 500 502 503 504 /50x.html;
##錯誤頁面配置
location = /50x.html {
root html;
}
}
}
4、日志格式設定
remoteaddr與remote_addr與remotea?ddr與http_x_forwarded_for用以記錄客戶端的ip地址;
$remote_user:用來記錄客戶端用戶名稱;
$time_local: 用來記錄訪問時間與時區;
$request: 用來記錄請求的url與http協議;
$status: 用來記錄請求狀態;成功是200,
$body_bytes_sent :記錄發送給客戶端文件主體內容大小;
$http_referer:用來記錄從那個頁面鏈接訪問過來的;
httpuseragent:記錄客戶瀏覽器的相關信息;通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過http_user_agent:記錄客戶瀏覽器的相關信息; 通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過httpu?sera?gent:記錄客戶瀏覽器的相關信息;通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址。
location常見配置指令,root、alias、proxy_pass
root(根路徑配置):請求www.kgc.com/test/1.jpg,會返回文件/usr/local/nginx/html/test/1.jpg
alias(別名配置):請求www.kgc.com/test/1.jpg,會返回文件/usr/local/nginx/html/1.jpg
proxy_pass(反向代理配置):
proxy_pass http://127.0.0.1:8080/; 會轉發請求到http://127.0.0.1:8080/1.jpg
proxy_pass http://127.0.0.1:8080; 會轉發請求到http://127.0.0.1:8080/test/1.jpg
四、訪問狀態統計配置
1、第一步
先使用命令/usr/local/nginx/sbin/nginx -V 查看已安裝的 Nginx 是否包含 HTTP_STUB_STATUS 模塊
2、修改 nginx.conf 配置文件,指定訪問位置并添加 stub_status 配置
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
…
http {
…
server {
listen 80;
server_name www.zhangsanc.com;
charset utf-8;
location / {
root html;
index index.html index.php;
}
##添加 stub_status 配置##
location /status { #訪問位置為/status
stub_status on; #打開狀態統計功能
access_log off; #關閉此位置的日志記錄
}
}
}
3、重啟服務,訪問測試
systemctl restart nginx
瀏覽器訪問 http://192.168.172.20/status
Active connections :表示當前的活動連接數;
server accepts handled requests :表示已經處理的連接信息,三個數字依次表示已處理的連接數、成功的TCP握手次數、 已處理的請求數。
五、基于授權的訪問控制
1、生成用戶密碼認證文件
yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db zhangsan
chmod 400 /usr/local/nginx/passwd.db
2、修改主配置文件相對應目錄,添加認證配置項
vim /usr/local/nginx/conf/nginx.conf
…
server {
location / {
…
##添加認證配置##
auth_basic “secret”;
auth_basic_user_file /usr/local/nginx/passwd.db;
}
}
3、重啟服務,訪問測試
nginx -t
systemctl restart nginx
瀏覽器訪問 http://192.168.172.20
六、基于客戶端的訪問控制
訪問控制規則如下:
deny IP/IP 段:拒絕某個 IP 或 IP 段的客戶端訪問。
allow IP/IP 段:允許某個 IP 或 IP 段的客戶端訪問。
規則從上往下執行,如匹配則停止,不再往下匹配。
vim /usr/local/nginx/conf/nginx.conf
…
server {
location / {
…
##添加控制規則##
deny 192.168.172.20; #拒絕訪問的客戶端 IP
allow all; #允許其它IP客戶端訪問
}
}
systemctl restart nginx
七、基于域名的 Nginx 虛擬主機
1、為虛擬主機提供域名解析
方法一:echo “192.168.172.10 www.kgc.com www.benet.com” >> /etc/hosts
方法二:做域名解析服務
2、為虛擬主機準備網頁文檔
mkdir -p /var/www/html/benet
mkdir -p /var/www/html/kgc
echo “
www.kgc.com
” > /var/www/html/kgc/index.htmlecho “
www.benet.com
” > /var/www/html/benet/index.html3、修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
…
http {
…
server {
listen 80;
server_name www.zhangsan.com; #設置域名www.zhangsan.com
charset utf-8;
access_log logs/www.zhangsan.access.log;
location / {
root /var/www/html/zhangsan; #設置www.zhangsan.com 的工作目錄
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
4、重啟服務,訪問測試
systemctl restart nginx
瀏覽器訪問
http://www.kgc.com
http://www.benet.com
八、基于IP 的 Nginx 虛擬主機
ifconfig ens33:0 192.168.172.200 netmask 255.255.255.0
vim /usr/local/nginx/conf/nginx.conf
…
http {
…
server {
listen 192.168.172.20:80; #設置監聽地址192.168.172.20
server_name www.zhangsan.com;
charset utf-8;
access_log logs/www.zhangsan.access.log;
location / {
root /var/www/html/zhangsan;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
systemctl restart nginx
瀏覽器訪問
http://192.168.172.20
http://192.168.172.200
九、基于端口的 Nginx 虛擬主機
vim /usr/local/nginx/conf/nginx.conf
…
http {
…
server {
listen 192.168.172.20:8080; #設置監聽 8080 端口
server_name www.zhangsan.com;
charset utf-8;
access_log logs/www.zhangsan.access.log;
location / {
root /var/www/html/zhangsan;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
systemctl restart nginx
瀏覽器訪問
http://192.168.172.20:8080
http://192.168.172.20:8888
總結