nginx 配置

nginx查看配置文件nginx.conf路径

当你执行 nginx -t 得时候,nginx会去测试你得配置文件得语法,并告诉你配置文件是否写得正确,同时也告诉了你配置文件得路径:

1
2
3
# nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
1
$ ps  -ef | grep nginx # 确定Nginx是以那个config文件启动的,也可以查看配置文件nginx.conf路径

nginx利用service进行启动

nginx启动、停止、无间断服务重启

1
2
3
[root@example ~]# service nginx start
[root@example ~]# service nginx stop
[root@example ~]# service nginx reload

在/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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/bin/sh
#
# nginx Startup script for nginx
#
# chkconfig: - 85 15
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# description: nginx is an HTTP and reverse proxy server
#
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop nginx
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

if [ -L $0 ]; then
initscript=`/bin/readlink -f $0`
else
initscript=$0
fi

sysconfig=`/bin/basename $initscript`

if [ -f /etc/sysconfig/$sysconfig ]; then
. /etc/sysconfig/$sysconfig
fi

nginx=${NGINX-/usr/sbin/nginx}
prog=`/bin/basename $nginx`
conffile=${CONFFILE-/etc/nginx/nginx.conf}
lockfile=${LOCKFILE-/var/lock/subsys/nginx}
pidfile=${PIDFILE-/var/run/nginx.pid}
SLEEPMSEC=${SLEEPMSEC-200000}
UPGRADEWAITLOOPS=${UPGRADEWAITLOOPS-5}
RETVAL=0

start() {
echo -n $"Starting $prog: "

daemon --pidfile=${pidfile} ${nginx} -c ${conffile}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}

stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} ${prog}
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}

reload() {
echo -n $"Reloading $prog: "
killproc -p ${pidfile} ${prog} -HUP
RETVAL=$?
echo
}

upgrade() {
oldbinpidfile=${pidfile}.oldbin

configtest -q || return
echo -n $"Starting new master $prog: "
killproc -p ${pidfile} ${prog} -USR2
echo

for i in `/usr/bin/seq $UPGRADEWAITLOOPS`; do
/bin/usleep $SLEEPMSEC
if [ -f ${oldbinpidfile} -a -f ${pidfile} ]; then
echo -n $"Graceful shutdown of old $prog: "
killproc -p ${oldbinpidfile} ${prog} -QUIT
RETVAL=$?
echo
return
fi
done

echo $"Upgrade failed!"
RETVAL=1
}

configtest() {
if [ "$#" -ne 0 ] ; then
case "$1" in
-q)
FLAG=$1
;;
*)
;;
esac
shift
fi
${nginx} -t -c ${conffile} $FLAG
RETVAL=$?
return $RETVAL
}

rh_status() {
status -p ${pidfile} -b ${nginx} ${nginx}
}

# See how we were called.
case "$1" in
start)
rh_status >/dev/null 2>&1 && exit 0
start
;;
stop)
stop
;;
status)
rh_status
RETVAL=$?
;;
restart)
configtest -q || exit $RETVAL
stop
start
;;
upgrade)
rh_status >/dev/null 2>&1 || exit 0
upgrade
;;
condrestart|try-restart)
if rh_status >/dev/null 2>&1; then
stop
start
fi
;;
force-reload|reload)
reload
;;
configtest)
configtest
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|upgrade|reload|status|help|configtest}"
RETVAL=2
esac

exit $RETVAL

nginx中对react、vue(spa)项目的缓存配置

目前前端的项目基本上被vue、react、angular霸占了,构建打包也基本上都是基于webpack,3个不同框架其实都提供了一套比较完成的开发工具链,最典型的其实就是将构建完成的文件加上hash值,如a.js 在构建完成后会变成a.abad3333ss.js文件,这样在前端项目发布新版部署的时候,能让浏览器不缓存a.js文件。

关于部署,目前前端基本上都是基于nginx进行独立部署的,方便快捷没有跨域问题,使用nginx部署就会有缓存问题,也就是浏览器访问你的域名之后,默认是会把所有静态文件缓存到本地的,针对这种情况,有2中解决方案:

nginx配置文件不缓存

不缓存,也就是在nginx的配置中,强制设置所有文件均不会在浏览器缓存,这样不管项目发版之后有没有对项目的静态文件的文件名设置hash值,(版本号),浏览器始终会去服务器请求最新的文件,坏处就是加载速度会稍慢,尤其是在网络条件不理想的情况下,具体配置如下:

在nginx.conf文件中的location或者server中设置请求cache-control请求头
1
add_header Cache-Control no-cache,no-store,must-revalidate;

静态文件加hash,nginx配置不缓存html

既然各开发框架构建的前端项目都对静态文件的文件名增加hash值,那么肯定要利用起来,但是直接使用会有问题。

构建出的静态文件-index.html 未改名,其他静态文件名是改了,但是文件引用全部是在这个html文件中的,如果index.html文件也缓存了,那么他引用的对应的文件也不会发生变化!这时候需要针对html单独进行缓存设置:

在对应的location中增加以下代码,即html后缀的文件名不会进行缓存
1
2
3
4
5
location / {
if ($request_filename ~* ^.*?.(html|htm)$){
add_header Cache-Control no-cache,no-store,must-revalidate;
}
}
您的支持将鼓励我继续创作!