Nginx服務(wù)器初期基本配置指南
一、準(zhǔn)備
pcre,有關(guān)正則表達式匹配;zlib,用于壓縮。這些就不細說了,如果要安裝最簡版的nginx,記得準(zhǔn)備好這兩樣?xùn)|西就好了。
用root賬戶啟動服務(wù)是比較危險的! 前段時間,測試服務(wù)器被黑掉了,終歸到底是通過一個root啟動的服務(wù)上傳了木馬,最后連ssh都屏蔽了,活生生成為一臺肉雞。。。
所以,慘痛的經(jīng)驗告訴我,一定要為服務(wù)建立對應(yīng)的組和用戶,限制訪問權(quán)限,降低風(fēng)險!
這里為nginx建立一個www組,并建立一個不登錄的賬戶nginx:
#追加一個www組 groupadd -f www #追加一個nginx用戶 useradd -s /sbin/nologin -g www nginx
建立一個目錄用于存放nginx日志文件,并賦予相應(yīng)權(quán)限:
#建立nginx日志目錄 mkdir /var/log/nginx #賦予訪問權(quán)限 chown nginx.www /var/log/nginx
二、編譯安裝
我把pcre、zlib、nginx的壓縮包都放在了/opt/software路徑下,服務(wù)要裝在/opt/servers路徑下。
先對pcre、zlib、nginx解壓,然后編譯安裝:
./configure --prefix=/opt/servers/nginx \ --user=nginx \ --group=www \ --pid-path=/var/run/nginx.pid \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-pcre=/opt/software/pcre-8.10 \ --with-zlib=/opt/software/zlib-1.2.5 \ --with-http_stub_status_module \ --with-http_realip_module \ --with-http_gzip_static_module \ --without-http_fastcgi_module \ --without-http_memcached_module \ --without-http_map_module \ --without-http_geo_module \ --without-http_autoindex_module \ --with-poll_module && make && make install
三、系統(tǒng)配置
我希望nginx可以作為一個服務(wù),通過service命令啟動或停止。
這樣做的好處是,不論我用什么用戶調(diào)用這個service命令,都不會因為使用錯誤的賬戶帶來安全問題。
建立一個系統(tǒng)文件:
vim /etc/init.d/nginx
前人栽樹,后人乘涼。已經(jīng)有老鳥做好了啟動配置文件:
#!/bin/bash
# v.0.0.1
# create by jackbillow at 2007.10.15
# nginx - This shell script takes care of starting and stopping nginx.
#
# chkconfig: - 60 50
# description: nginx [engine x] is light http web/proxy server
# that answers incoming ftp service requests.
# processname: nginx
# config: /etc/nginx.conf
nginx_path="/opt/servers/nginx"
nginx_pid="/var/run/nginx.pid"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginx_path/sbin/nginx ] || exit 0
RETVAL=0
prog="nginx"
start() {
# Start daemons.
if [ -e $nginx_pid -a ! -z $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
if [ -e $nginx_path/conf/nginx.conf ];then
echo -n $"Starting $prog: "
$nginx_path/sbin/nginx -c $nginx_path/conf/nginx.conf &
RETVAL=$?
[ $RETVAL -eq 0 ] && {
touch /var/lock/subsys/$prog
success $"$prog"
}
echo
else
RETVAL=1
fi
return $RETVAL
}
# Stop daemons.
stop() {
echo -n $"Stopping $prog: "
killproc -d 10 $nigx_path/sbin/nginx
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $nginx_pid /var/lock/subsys/$prog
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit $RETVAL
注意,這里的路徑:
引用
nginx_path="/opt/servers/nginx" nginx_pid="/var/run/nginx.pid"
如果你的nginx安裝路徑在其它位置,請對應(yīng)修改!
然后賦予這個文件執(zhí)行權(quán)限:
chmod +x /etc/init.d/nginx
追加為系統(tǒng)服務(wù):
chkconfig --add nginx chkconfig nginx on
現(xiàn)在就可以使用,如下命令控制nginx服務(wù)了!
引用
#啟動nginx service nginx start #停止nginx service nginx stop #重啟nginx service nginx restart #查看nginx狀態(tài) service nginx status
四、基本配置
完成上述工作后,nginx還不能急于投入使用,需要做一些基本配置與優(yōu)化工作。
修改nginx配置文件:
vim /opt/servers/nginx/conf/nginx.conf
微調(diào)
引用
#使用的用戶和組,這里我們?yōu)閚ginx服務(wù)新建了nginx賬戶和www工作組
user nginx www;
#制定的工作衍生進程數(shù)(2倍于CPU內(nèi)核數(shù))
worker_processes 4;
#錯誤日志存放路徑,日志級別由低到高[debug | info | notice | warn | error | crit]
error_log /var/log/nginx/error.log crit;
#指定文件描述符數(shù)量 與ulimit -n數(shù)值保持一致
work_rlimit_nofile 65535;
events {
#使用的網(wǎng)絡(luò)I/O模型,Linux用epoll模型,Unix用kqueue模型
use epoll;
#允許的連接數(shù)
worker_connections 51200;
}
http{
include mime.types;
default_type application/octet-stream;
#追加 '"$sent_http_cache_control" "$sent_http_pl" "$request_time"'獲取請求細節(jié)信息
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'"$sent_http_cache_control""$sent_http_pl" "$request_time"';
access_log /var/log/nginx/access.log main;
...
server{
...
location / {
root html;
index index.html index.htm index.jsp index.do;
#在header中傳遞請求放host、ip等信息
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_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
...
}
}
}
五、虛擬目錄
nginx配置虛擬目錄很簡單,主要是運用root、alias兩個指令。
以訪問圖片服務(wù)為例:
root,用于相對路徑
引用
location /image/ {
root /data;
}
當(dāng)我們訪問“/image/”路徑時,實際上訪問的是“/data/image/”,注意“/data”后面不要有“/”
alias,用于絕對路徑
引用
location /image/ {
alias /data/img/;
}
當(dāng)我們訪問“/image/”路徑時,實際上訪問的是“/data/img/”,注意“/data/img/”以“/”結(jié)尾。
六、重定向
有時候鏈接不加考慮就放出去了,突然哪天需要調(diào)整,又不能及時撤回已放出的鏈接地址。只好自己修改nginx配置。
譬如,放出去的鏈接:/activity.do?m=v 想讓它指到/路徑上:
引用
rewrite ^/activity(.*)$ / last;
想要把請求來的參數(shù)也帶上:
引用
rewrite ^/activity(.*)$ /$1 last;
$1指得是第一個參數(shù),以此類推。
六、監(jiān)控
引用
location /status {
stub_status on;
access_log off;
allow 10.10.0.0/16;
allow 10.1.0.0/16;
allow 10.11.0.0/16;
deny all;
}
引用
Active connections: 14 server accepts handled requests 62 62 302 Reading: 0 Writing: 3 Waiting: 11
七、日志分割
#!/bin/bash
# THis script run at 00:00
# author dongliang at 2012-09-07
# Nginx Log Path
logs_path="/var/log/nginx/"
# Nginx PID Path
nginx_pid="/var/run/nginx.pid"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%
d").log
mv ${logs_path}error.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/error_$(date -d "yesterday" +"%Y%m%d"
).log
kill -USR1 `cat $nginx_pid`
賦予執(zhí)行權(quán)限
chmod +x nginx_log.sh
凌晨執(zhí)行
crontab -e 0 0 * * * /opt/script/nginx_log.sh
八、Nginx負載均衡
在http{...}中配置一個upstream{...},參考如下:
引用
upstream tomcat {
server 10.11.155.26:8080;
server 10.11.155.41:8080;
}
接著修改location節(jié)點,配置代理:
引用
location / {
...
proxy_pass http://tomcat;
...
}
當(dāng)訪問根路徑時,會輪播路由到兩臺服務(wù)器上,至于后端服務(wù)器是tomcat還是jetty之類的,都無所謂,照葫蘆畫瓢就是了。
當(dāng)然,有的機器性能好,或者負載低,可以承擔(dān)高負荷訪問量,可以通過權(quán)重(weight),提升訪問頻率。數(shù)值越高,被分配到的請求數(shù)越多。
server指令參數(shù)如下:
weight——權(quán)重,數(shù)值越大,分得的請求數(shù)就越多,默認(rèn)值為1。
max_fails——對訪問失敗的后端服務(wù)器嘗試訪問的次數(shù)。默認(rèn)值為1,當(dāng)設(shè)置為0時將關(guān)閉檢查。
fail_timeout——失效超時時間,當(dāng)多次訪問失敗后,對該節(jié)點暫停訪問。
down——標(biāo)記服務(wù)器為永久離線狀態(tài),用于ip_hash指令。
backup——僅當(dāng)非backup服務(wù)器全部宕機或繁忙時啟用。
例如,可以這樣配置:
引用
upstream tomcat {
server 10.11.155.26:8080 weight=5;
server 10.11.155.41:8080 weight=10;
}
后者分得的請求數(shù)就會較高。
相關(guān)文章
關(guān)于nginx沒有跳轉(zhuǎn)到upstream地址的解決
這篇文章主要介紹了關(guān)于nginx沒有跳轉(zhuǎn)到upstream地址的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Nginx使用ngx_http_upstream_module實現(xiàn)負載均衡功能示例
本文主要介紹了Nginx使用ngx_http_upstream_module實現(xiàn)負載均衡功能示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
nginx http模塊數(shù)據(jù)存儲結(jié)構(gòu)小結(jié)
這篇文章主要介紹了nginx http模塊數(shù)據(jù)存儲結(jié)構(gòu)小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
教你利用Nginx 服務(wù)搭建子域環(huán)境提升二維地圖加載性能的步驟
這篇文章主要介紹了利用 Nginx 服務(wù)搭建子域環(huán)境提升二維地圖加載性能,本文分步驟通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2021-09-09

