一、如何给配置文件加高亮?
- 在讲解配置文件之前,我们给配置文件加高亮方便配置文件的查看及排错
[root@server1 contrib]# cd ##必须切换到主目录下
[root@server1 ~]# mkdir .vim
[root@server1 ~]# cd nginx-1.14.2/contrib/
[root@server1 contrib]# cp -r vim/* ~/.vim
[root@server1 nginx-1.14.2]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
二、如果查看nginx的版本和编辑加载过的模块
[root@server1 ~]# nginx -V ##看版本以及加载过的模块
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
configure arguments: --prefix=/usr/local/nginx --with-http_realip_module
[root@server1 ~]# nginx -v ##查看版本
nginx version: nginx/1.14.2
三、配置文件中典型参数
#Nginx的worker进程运行用户以及用户组
user nobody nobody;
#Nginx开启的进程数,建议为CPU的核数
worker_processes 1;
#worker_processes auto;
#以下参数指定了哪个cpu分配给哪个进程,一般来说不用特殊指定。如果一定要设的话,用0和1指定分配方式.
#这样设就是给1-4个进程分配单独的核来运行,出现第5个进程是就是随机分配了。eg:
worker_processes 4 #4核CPU
worker_cpu_affinity 0001 0010 0100 1000
#定义全局错误日志定义类型,[debug|info|notice|warn|crit]
error_log logs/error.log info;
#指定进程ID存储文件位置
#pid logs/nginx.pid;
#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
#vim /etc/security/limits.conf
# * soft nproc 65535
# * hard nproc 65535
# * soft nofile 65535
# * hard nofile 65535
worker_rlimit_nofile 65535;
四、企业中打包日志
- 企业中要实现打包前一天的日志,如何实现呢?
#打开nginx
[root@server1 ~]# cd /usr/local/nginx/logs/
[root@server1 logs]# ls ##我们要打包access.log
access.log error.log nginx.pid nginx.pid.oldbin
#首先我们可以先实现打出前一天的日期
[root@server1 logs]# date +%F -d -1day 打出前一天的日期信息
2019-02-20
[root@server1 logs]# mv access.log `date +%F -d -1day`_access.log
[root@server1 logs]# ls
2019-02-20_access.log error.log nginx.pid nginx.pid.oldbin
[root@server1 logs]# /usr/local/nginx/sbin/nginx -s reopen
[root@server1 logs]# ls
2019-02-20_access.log access.log error.log nginx.pid nginx.pid.oldbin
五、对客户端并发量,下载速度的限制
- 限制客户端请求的并发量为1
- 编辑配置文件
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
34 limit_conn_zone $binary_remote_addr zone=addr:10m;
48 location /download/ { # download是客户端访问nginx的一个发布目录
49 limit_conn addr 1; # 并发量为1
50 }
- 在/usr/local/nginx/html/下创建目录download/,并放入一个图片
[root@server1 conf]# cd /usr/local/nginx/html/
[root@server1 html]# mkdir download
[root@server1 html]# cd download/
[root@server1 download]# ls
vim.jpg
[root@server1 download]# du -h vim.jpg
444K vim.jpg
- 重启配置文件,之后每次编辑完配置文件都要重启,不再赘述
- 测试
模拟客户端的请求,并发量为1,没有错误请求
[root@server1 download]# ab -c 1 -n 10 http://172.25.79.1/download/vim.jpg
如果并发为10 ,即-c 10,则错误为
- 限制客户端下载速率为50k
49 location /download/ {
50 limit_conn addr 1;
51 limit_rate 50k;
52 }
- 测试:
[root@server1 download]# ab -c 1 -n 10 http://172.25.79.1/download/vim.jpg
显示80秒左右
3.
33 #gzip on;
34 limit_conn_zone $binary_remote_addr zone=addr:10m;
35 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
说明:区域名称为one(自定义),占用空间大小为10m,平均处理的请求频率不能超过每秒一次
49 location /download/ {
50 limit_conn addr 1;
51 #limit_rate 50k;
52 limit_req zone=one burst=5; #burst用于指定最大突发请求数。许多场景下,单一地限制rate并不能满足需求,设置burst,可以延迟处理超过rate限制的请求。
53 }
- 测试:
[root@server1 download]# ab -c 1 -n 10 http://172.25.79.1/download/vim.jpg
9秒左右
六、图片共享
- 将nginx关掉,重新编译,加载新的模块
[root@server1 nginx-1.14.2]# nginx -s stop
[root@server1 ~]# cd nginx-1.14.2
[root@server1 nginx-1.14.2]# make clean ##重新编译之前要make clean
[root@server1 nginx-1.14.2]# yum install -y gd-devel-2.0.35-26.el7.x86_64.rpm ##安装
[root@server1 nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic ##添加图形动态模块
[root@server1 nginx-1.14.2]# make ##不要make install(除了第一次编译)
- 将新的二进制文件替换原来的nginx二进制文件
[root@server1 nginx-1.14.2]# cd objs/
[root@server1 objs]# cp nginx /usr/local/nginx/sbin/nginx
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y
- 创建新的模块目录,并将图像模块放在目录下
[root@server1 objs]# mkdir /usr/local/nginx/modules
[root@server1 objs]# ls
autoconf.err ngx_http_image_filter_module_modules.c
Makefile ngx_http_image_filter_module_modules.o
nginx ngx_http_image_filter_module.so
nginx.8 ngx_modules.c
ngx_auto_config.h ngx_modules.o
ngx_auto_headers.h src
[root@server1 objs]# cp ngx_http_image_filter_module.so /usr/local/nginx/modules/
- 编写配置文件
[root@server1 objs]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
5. 开启nginx,并重新加载配置文件
[root@server1 conf]# nginx
[root@server1 conf]# nginx -s reload ##之后不再赘述
- 创建download目录,并放入图片
[root@server1 conf]# cd /usr/local/nginx/html
[root@server1 html]# mkdir download
[root@server1 html]# cd download/
[root@server1 download]# ls
vim.jpg
- 在浏览器输入172.25.79.1/download/vim.jpg 可以看到图片
- 但是我们发现,客户想下载图片,就需要在浏览器输入的时候加上图片名称,这样显然是不合理的
- 我们继续修改配置文件
- 再在浏览器输入http://172.25.79.1/download/
- 这样,我们可以在download目录下可以放很多东西,客户想看哪个进行选择即可。
- 我们还可以设置图片的额报错期限
- 再编辑配置文件
location ~ .*\.(jpg|png|css|js)?$ {
expires 30d; ##设置为30天
}
- 测试
[root@foundation19 ~]# curl -I 172.25.79.1/download/vim.jpg
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Fri, 22 Feb 2019 05:18:07 GMT
Content-Type: image/jpeg
Content-Length: 453575
Last-Modified: Fri, 20 May 2016 03:53:06 GMT
Connection: keep-alive
ETag: "573e8a22-6ebc7"
Expires: Sun, 24 Mar 2019 05:18:07 GMT ##这里会显示到期日
Cache-Control: max-age=2592000
Accept-Ranges: bytes
七、实现https加密
- 关掉原来的nginx,重新编译,添加ssl模块
[root@server1 objs]# nginx -s stop
重新编译:
[root@server1 nginx-1.14.2]# make clean
rm -rf Makefile objs
[root@server1 nginx-1.14.2]# yum install -y openssl-devel
[root@server1 nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module
[root@server1 nginx-1.14.2]# make
- 将新生的二进制文件替代原来的,并且要再次将图像模块放入modules目录下
[root@server1 objs]# cp nginx /usr/local/nginx/sbin/nginx
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y
[root@server1 objs]# ls
autoconf.err ngx_http_image_filter_module_modules.c
Makefile ngx_http_image_filter_module_modules.o
nginx ngx_http_image_filter_module.so
nginx.8 ngx_modules.c
ngx_auto_config.h ngx_modules.o
ngx_auto_headers.h src
[root@server1 objs]# cp ngx_http_image_filter_module.so /usr/local/nginx/modules/
cp: overwrite ‘/usr/local/nginx/modules/ngx_http_image_filter_module.so’? y
- 在cd /etc/pki/tls/cd cert目录下,生成证书
[root@server1 certs]# cd /etc/pki/tls/certs/
[root@server1 certs]# make cert.pem
- 将锁子和钥匙放在nginx的配置文件目录下
[root@server1 certs]# cp cert.pem /usr/local/nginx/conf/
- 首先我们先可以测一下http的正常访问
- 编写配置文件
- 开启nginx
[root@server1 conf]# nginx
[root@server1 conf]# nginx -s reload
- 添加域名解析
[root@server1 conf]# vim /etc/hosts
172.25.79.1 www.westos.org
- 创建/web,并编写测试页
[root@server1 /]# cd
[root@server1 ~]# mkdir /web
[root@server1 ~]# cd /web/
[root@server1 web]# vim index.html
www.westos.org
- 测试:访问正常
[root@server1 web]# curl www.westos.org
www.westos.org
- 重新编写配置文件,实现http—>https
- 检测语法错误,并重新加载配置文件
[root@server1 certs]# nginx -t
[root@server1 certs]# nginx -s reload
- 测试
- 在测试主机中添加域名解析
[root@foundation19 ~]# cat /etc/hosts
172.25.79.1 www.westos.org
- 然后进入浏览器输入www.wetsos.org,第一次进入,浏览器会让你添加证书
- 添加之后,在做尝试,输入 www.westos.org,就会自动转到https加密模式
八、重定向
- 将westos.org重定向到https://www.westos.org
server {
listen 80;
server_name www.westos.org;
rewrite ^/(.*)$ https://www.westos.org/$1; ##$1表示后面可以跟文件,否则会报错
- 测试(302表示重定向)
[root@foundation79 ~]# curl -I www.westos.org
但是我们发现当访问 www.westos.org/test.jpg 的时候,就不能正确访问转到 https://www.westos.org/test.jpg
- 添加$1:
这样就可以成功了
- 如果后面加permanent参数,表示永久重定向
测试:
- 编辑配置文件
- 创建/bbs目录,并编写测试页
[root@server1 certs]# mkdir /bbs
[root@server1 certs]# cd /bbs/
[root@server1 bbs]# vim index.html
bbs.westos.org
- 在测试主机添加解析
[root@foundation79 ~]#
172.25.79.1 www.westos.org bbs.westos.org
- 浏览器可以访问到 bbs.westos.org
- 修改配置文件
- 测试
[root@foundation79 ~]# curl -I www.westos.org/bbs
和上面的问题一样,在网址后添加测试页,就会报错
修改如下:
再次测试则成功:
- 将bbs.westos.org转到http://www.westos.org/bbs下
- 直接将/bbs这个目录放到/web下的方式:
[root@server1 bbs]# cd
[root@server1 ~]# cd /web/
[root@server1 web]# cp -r /bbs/ /web/
[root@server1 web]# ls
bbs index.html test.html
- 编写配置文件
- 测试:
九、防盗链
- 测试端添加解析
[root@foundation79 images]# vim /etc/hosts
172.25.19.1 www.westos.org bbs.westos.org
172.25.19.2 daolian.westos.org ##添加此处
- 新安装一台nginx主机,并编写配置文件
[root@server2 conf]# vim /usr/local/nginx/conf/nginx.conf
- server2添加解析,并创建/web目录,编写测试页
[root@server2 web]# cat /etc/hosts
172.25.79.2 server2 daolian.westos.org
[root@server2 ~]# mkdir /web
[root@server2 ~]# cd /web/
[root@server2 web]# vim index.html
<html>
<body>
<br>盗链图片</br>
<img src="http://www.westos.org/vim.jpg"> ##盗取server1上的图片vim.jpg
</body>
</html>
4. 测试:
那么我们如何防盗链呢?
5. 在server1上重新编写配置文件
2. 浏览器再次此时,这回图片裂开了,说明防盗链成功
如果我们想给客户返回一张图片,而不是裂开的图片,又该怎么办呢?
- 将我们想放的图片放到/bbs下
[root@server1 ~]# cd /bbs/
[root@server1 bbs]# ls
daolian.jpg index.html ##这个daolian.jpg是我想放的图片
- 修改配置文件如下:
- 再次测试: