小知识:Nginx服务器初期基本配置指南

一、准备

pcre,有关正则表达式匹配;zlib,用于压缩。这些就不细说了,如果要安装最简版的nginx,记得准备好这两样东西就好了。

root账户启动服务是比较危险的!  前段时间,测试服务器被黑掉了,终归到底是通过一个root启动的服务上传了木马,最后连ssh都屏蔽了,活生生成为一台肉鸡。。。

所以,惨痛的经验告诉我,一定要为服务建立对应的组和用户,限制访问权限,降低风险! 

这里为nginx建立一个www组,并建立一个不登录的账户nginx:
?
1
2
3
4
#追加一个www组
groupadd -f www
#追加一个nginx用户
useradd -s /sbin/nologin -g www nginx

建立一个目录用于存放nginx日志文件,并赋予相应权限:

?
1
2
3
4
#建立nginx日志目录
mkdir /var/log/nginx
#赋予访问权限
chown nginx.www /var/log/nginx

二、编译安装

我把pcre、zlib、nginx的压缩包都放在了/opt/software路径下,服务要装在/opt/servers路径下。

先对pcre、zlib、nginx解压,然后编译安装:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
./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

三、系统配置

我希望nginx可以作为一个服务,通过service命令启动或停止。

这样做的好处是,不论我用什么用户调用这个service命令,都不会因为使用错误的账户带来安全问题。

建立一个系统文件:
?
1
vim /etc/init.d/nginx

前人栽树,后人乘凉。已经有老鸟做好了启动配置文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/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

注意,这里的路径:

引用
?
1
2
nginx_path=”/opt/servers/nginx”
nginx_pid=”/var/run/nginx.pid”

如果你的nginx安装路径在其它位置,请对应修改!

然后赋予这个文件执行权限:
?
1
chmod +x /etc/init.d/nginx

追加为系统服务:

?
1
2
chkconfig –add nginx
chkconfig nginx on

现在就可以使用,如下命令控制nginx服务了!

引用
?
1
2
3
4
5
6
7
8
#启动nginx
service nginx start
#停止nginx
service nginx stop
#重启nginx
service nginx restart
#查看nginx状态
service nginx status

四、基本配置

完成上述工作后,nginx还不能急于投入使用,需要做一些基本配置与优化工作。

修改nginx配置文件:
?
1
vim /opt/servers/nginx/conf/nginx.conf

微调

引用
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#使用的用户和组,这里我们为nginx服务新建了nginx账户和www工作组
user nginx www;
#制定的工作衍生进程数(2倍于CPU内核数)
worker_processes 4;
#错误日志存放路径,日志级别由低到高[debug | info | notice | warn | error | crit]
error_log /var/log/nginx/error.log crit;
#指定文件描述符数量 与ulimit -n数值保持一致
work_rlimit_nofile 65535;
events {
#使用的网络I/O模型,Linux用epoll模型,Unix用kqueue模型
use epoll;
#允许的连接数
worker_connections 51200;
}
http{
include  mime.types;
default_type application/octet-stream;
#追加 “$sent_http_cache_control” “$sent_http_pl” “$request_time”获取请求细节信息
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两个指令。

以访问图片服务为例:

root,用于相对路径

引用
?
1
2
3
location /image/ {
root /data;
}

当我们访问“/image/”路径时,实际上访问的是“/data/image/”,注意“/data”后面不要有“/”

alias,用于绝对路径

引用
?
1
2
3
location /image/ {
alias /data/img/;
}

当我们访问“/image/”路径时,实际上访问的是“/data/img/”,注意“/data/img/”以“/”结尾。

六、重定向

有时候链接不加考虑就放出去了,突然哪天需要调整,又不能及时撤回已放出的链接地址。只好自己修改nginx配置。

譬如,放出去的链接:/activity.do?m=v 想让它指到/路径上:

引用
?
1
rewrite ^/activity(.*)$ / last;

想要把请求来的参数也带上:

引用
?
1
rewrite ^/activity(.*)$ /$1 last;

$1指得是第一个参数,以此类推。

六、监控 引用

?
1
2
3
4
5
6
7
8
9
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;
}

引用

?
1
2
3
4
Active connections: 14
server accepts handled requests
62 62 302
Reading: 0 Writing: 3 Waiting: 11

七、日志分割

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/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`

赋予执行权限

?
1
chmod +x nginx_log.sh

凌晨执行

?
1
2
crontab -e
0 0 * * * /opt/script/nginx_log.sh

八、Nginx负载均衡

在http{…}中配置一个upstream{…},参考如下:

引用
?
1
2
3
4
upstream tomcat {
server 10.11.155.26:8080;
server 10.11.155.41:8080;
}

接着修改location节点,配置代理:

引用
?
1
2
3
4
5
6
location / {
proxy_pass http://tomcat;
}

当访问根路径时,会轮播路由到两台服务器上,至于后端服务器是tomcat还是jetty之类的,都无所谓,照葫芦画瓢就是了。

当然,有的机器性能好,或者负载低,可以承担高负荷访问量,可以通过权重(weight),提升访问频率。数值越高,被分配到的请求数越多。

server指令参数如下:

weight——权重,数值越大,分得的请求数就越多,默认值为1。

max_fails——对访问失败的后端服务器尝试访问的次数。默认值为1,当设置为0时将关闭检查。

fail_timeout——失效超时时间,当多次访问失败后,对该节点暂停访问。

down——标记服务器为永久离线状态,用于ip_hash指令。

backup——仅当非backup服务器全部宕机或繁忙时启用。

例如,可以这样配置:

引用
?
1
2
3
4
upstream tomcat {
server 10.11.155.26:8080 weight=5;
server 10.11.155.41:8080 weight=10;
}

后者分得的请求数就会较高。

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Guake 终端:一个灵感来自于 FPS 游戏的 Linux 终端

2023-5-2 5:07:45

建站知识

小知识:awk:一个强大的文本分析工具

2023-5-2 5:16:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索