Linux运维昱笔记(四):Nginx安装以及优化笔记

Linux运维昱笔记(四):Nginx安装以及优化笔记

nginx理论,源码编译安装nginx

理论:

nginx有两个进程,一个master主进程,由主进程派生出多个工作进程

pstree		#进程树

在这里插入图片描述
nginx和php有两种结合方式:
第一种是nginx接收交给fpm,fpm调用php,php有可能调用mysql。
Linux运维昱笔记(四):Nginx安装以及优化笔记_第1张图片
第二种是nginx收到请求后将请求交给lamp。
Linux运维昱笔记(四):Nginx安装以及优化笔记_第2张图片

安装
 #装nginx前必须安装的软件包
[root@localhost ~] yum -y install pcre-devel zlib-devel openssl-dever gcc gcc-c++ make 
#创建一个程序用户
[root@localhost ~] useradd -M -s /sbin/nologin nginx 
#解压软件包-C指定安装路径
[root@localhost ~] tar xf nginx-1.15.9.tar.gz -C /usr/src/
#进入解压的目录中
[root@localhost ~] cd /usr/src/nginx-1.15.9/
#指定配置参数并编译安装nginx
[root@localhost ~] ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre && make && make install	
#为命令创建软连接
[root@localhost ~] ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
#启动nginx服务
[root@localhost ~] nginx	
#查看nginx是否启动成功也可以nginx -t
[root@localhost ~] netstat -lntp | grep 80
#访问测试一下,看是否成功
[root@localhost ~] elinks --dump http://192.168.1.6
	Welcome to nginx!
#访问成功

–prefix=/usr/local/nginx :指定安装路径
–user=nginx --group=nginx:指定用户和组
–with-file-aio:支持aio模块
–with-http_stub_status_module:支持静态统计模块
–with-http_gzip_static_module:支持gzip压缩的模块
–with-http_flv_module:支持flv模块
–with-http_ssl_module:支持ssl模块
–with-pcre:支持pcre

小知识:
我们./configure后加的配置项在执行完的时候会在当前目录下生成一个叫Makefile的文件。
make就会参考Makefile这个文件进行编译,编译会在ojbs目录下生成许多的文件,其实我们在执行完make的时候软件就已经装完了。
而make install就是把objs下的文件放到你所指定的目录下,我们会发现在make install的时候都是cp或者是mv命令开头。

一、配置nginx隐藏版本号

在生产环境中,需要隐藏nginx等服务的版本信息,以避免安全风险。

[root@localhost ~] curl -I http://192.168.1.6	#查看报头信息就能看到版本号。

HTTP/1.1 200 OK
Server: nginx/1.15.9
Date: Mon, 21 Oct 2019 20:41:28 GMT
Content-Type: text/html
Content-Length: 639
Last-Modified: Mon, 21 Oct 2019 10:35:09 GMT
Connection: keep-alive
ETag: “5dad89dd-27f”
Accept-Ranges: bytes

1、修改源码包(安装前改,想咋改咋改)

还是之前的操作

[root@localhost ~] yum -y install pcre-devel zlib-devel openssl-dever gcc gcc-c++ make 
[root@localhost ~] useradd -M -s /sbin/nologin nginx 
[root@localhost ~] tar xf nginx-1.15.9.tar.gz -C /usr/src/
[root@localhost ~] cd /usr/src/nginx-1.15.9/
[root@localhost ~] vim src/core/nginx.h
13 #define NGINX_VERSION	"7.0.0"
14 #define NGINX_VER		"IIS/" NGINX_VERSION

注意不用去掉 # 号直接修改后面的版本号和名字就行记得wq保存之后再编译安装

[root@localhost ~] ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre && make && make install	
[root@localhost ~] ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
[root@localhost ~] nginx
[root@localhost ~] netstat -lnpt | grep 80

当我们再去查看的时候版本号就被我们修改了

[root@localhost ~] curl -I http://192.168.1.6

HTTP/1.1 200 OK
Server: IIS/7.0.0
Date: Mon, 21 Oct 2019 20:41:28 GMT
Content-Type: text/html
Content-Length: 639
Last-Modified: Mon, 21 Oct 2019 10:35:09 GMT
Connection: keep-alive
ETag: “5dad89dd-27f”
Accept-Ranges: bytes

2、修改配置文件(只能隐藏你的版本号,并不能改nginx)
[root@localhost ~] vim /usr/local/nginx/conf/nginx.conf
28	server_tokens off;		#只要是http{}中就行了
[root@localhost ~] killall -HUP nginx		#重新加载nginx配置文件

如果php配置文件中配置了fastcgi_param SERVER_SOFTWARE选项,则编辑php-fpm配置文件,将fastcgi_param SERVER_SOFTWARE对应值修改为fastcgi_param SERVER_SOFTWARE nginx;

二、修改nginx用户和组

nginx运行时进程需要有用户与组身份的支持,以实现对网站文件读取进行访问控制。nginx默认使用nobody用户账号与组账号,一般也需要进行修改。

1、编译安装时指定
[root@localhost ~] useradd -M -s /sbin/nologin nginx
[root@localhost ~] ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx 
&& make && make install
2、修改配置文件
[root@localhost ~] vim /usr/local/nginx/conf/nginx.conf
	2 user	nginx  nginx;
[root@localhost ~] killall -HUP nginx

三、配置nginx网页缓存时间

当nginx将网页数据返回给客户端后,可设置资源在客户端缓存的时间,一番便客户端在日后进行相同内容的请求时直接返回,避免重复请求们加快了访问速度,一般针对静态网页进行设置,对动态网页不用设置缓存时间,可在Windows客户端中使用fidder查看网页缓存时间。

设置方法:可修改配置文件,在http段或者location段加入对特定内容的过滤参数。

[root@localhost ~] vim /usr/local/nginx/conf/nginx.conf
	local ~ \.(jpg|jpeg|png|bmp|ico|gif)${
		expires 1d;			
	}		#图片缓存一天
	location ~ .*\.{js|css)${
		expires 1h;
	}		#其他这些类型缓存一个小时
[root@localhost ~] killall -HUP nginx

Ctrl +F5 强制刷新网页

四、nginx日志切割

[root@localhost ~] vim /opt/cut_nginx_log.sh
#!/bin/bash
#cut_nginx_log.sh日志切割脚本
datetime=${date -d "-1 day" "+%Y%m%d"}
log_path="/usr/local/nginx/logs"
pid_path="/usr/local/nginx/logs/nginx.pid"
[-d $log_path/bakeup] || mkdir -p $log_path/backup
if [-f $pid_path]
then
	mv $log_path/access.log $log_path/backup/access.log-$datetime
	kill -USR1 $(cat $pid_path)
	find $log_path/backup -mtime +30 | xargs rm -f
else
	echo "Error,Nginx is not working!" | tee -a /var/log/messages
fi
[root@localhost ~] chmod +x /opt/cut_nginx_log.sh
[root@localhost ~] crontab -e
0	0	*	*	*	/opt/cut_nginx_log.sh
/opt/cut_nginx_log.sh
[root@localhost ~] ls /usr/local/nginx/logs/backup/
access.log-20191021
[root@localhost ~] killall -9 nginx
[root@localhost ~] /opt/cut_nginx_log.sh
Error,Nginx is not working!
[root@localhost ~] tail -1 /var/log/messages
Error,Nginx is not working!

##脚本看不懂的私聊我

五、配置nginx实现连接超时(连接保持)

在企业网站中,为了避免同一个客户长时间占用连接,造成服务器资源浪费,可以设置相应的连接超时参数,实现控制访问时间。

keepalived_timeout:设置连接保持超时时间,一般可只设置改参数,默认为65秒,可根据网站的情况设置,或者关闭,可在http段、server段或者location段设置。
client_header_timeout:指定等待客户端发送请求头的超时时间。
client_body_timeout:设置请求体读取超时时间。
注意:若出现超时,会返回408状态码。

[root@localhost ~] vim /usr/local/nginx/conf/nginx.conf
34	keepalive_timeout 65;
35	client_header_timeout 60;
36	clien_body_timeout 60;
[root@localhost ~] killall -HUP nginx

六、更改nginx运行进程数

在高并发场景,需要启动更多的nginx进程以保证快速影响,已处理用户的请求,避免造成阻塞。
修改配合文件的worker_processes参数,一般设置为CPU的个数或者核数的2倍。

[root@localhost ~] grep 'core id' /proc/cpuinfo | uniq | wc -l
	1
[root@localhost ~] vim /usr/local/nginx/conf/nginx.conf
	3 worker_processes 2;
[root@localhost ~] /usr/local/nginx/sbin/nginx
[root@localhost ~] ps aux | grep nginx | grep -v grep
	root	4331	0.0	0.2	45040	1160 ?		Ss	00:50 00:00 nginx:master
	process /usr/local/nginx/sbin/nginx
	......

默认nginx的多个进程可能更多的跑在一颗CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU。在一台4核物理服务器,可以进行下面的配置,将进程进行分配。

worker_cpu_affinity 0001 0010 0100 1000

七、配置nginx实现网页压缩功能

nginx的ngx_http_gzip_module压缩模块提供了对文件内容压缩的功能,允许nginx服务器将输出内容发送到客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,模块默认已经安装。

[root@localhost ~] vim /usr/local/nginx/conf/nginx.conf

八、配置nginx实现防盗链功能

nginx防盗链功能非常强大,在默认情况下只需要进行简单的配置,即可实现防盗处理。

  • 实验环境:
    资源主机 www.source.com 192.168.1.6
    盗链主机 www.steal.com 192.168.1.4
1、建立资源主机的测试网页
[root@localhost ~] vim /usr/local/nginx/html/index.html
<html>
<head>
<title>source page</title>
</head>
<body>
<h1>www.source.com</h1>
<img src="linux.png" />
</body>
</html>
[root@localhost ~] ls /usr/local/nginx/html/
50x.html error.log index.html linux.png
2、设置盗链主机盗取图片
<html>
<head>
<title>source page</title>
</head>
<body>
<h1>www.steal.com</h1>
<img src="http://www.source.com/linux.png"/>
</body>
</html>
3、资源主机设置防盗链

配置说明:
valid_referers 设置信任网站
none 浏览器中referer(Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是哪个页面链接过来的,服务器基此可以获得一些信息用于处理)为空的情况,就直接在浏览器访问图片。
blocked referer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或https://开头。

[root@localhost ~] vim /usr/local/nginx/conf/nginx.conf

48        location ~* \.(wma|wmv|asf|mps|mmf|zip|rar|jpg|png|gif|swf|flv)$ {
49                valid_referers none blocked *.source.com source.com;
50                if ($invalid_referer){
51                        rewrite ^/ http://www.source.com/error.jpg;
52                       #reyurn 403;
53                        }	

第一行: wma|wmv|asf |mp3|mnf|zip|rar|jpg |gif|png|swf|flv表示对这些后缀的文件实行防盗链。

第二行: none blocked *. source. com source. com; //不区分大小写。

表示referers信息中匹配none blocked *. source. com source. com. (xing代表任何,任何的二级域名)。

if{}里面内容的意思是,如果链接不是来自第二行指定的就强制跳转到403错误页面,当然直接返回404也是可以的,也可以是图片。

注意:设置客户机的hosts文件。

九、对FPM模块进行参数优化

nginx的php解析功能实现如果是交由FPM(fastcgi 进程管理器) 处理的,为了提高PHP的处理速度,可对FPM模块进行参数跳转。
FPM优化参数:
pm :使用哪种方式启动fpm进程,可以说static和dynamic,前者将产生固定数量的fpm进程,后者将以动态的方式产生fpm进程。
pm.max_children :stati方式下开启的fpm进程数。
pm.start_servers : 动态方式下初始的fpm进程数量。
pm.min_spare_servers :动态方式下最小的fpm空闲进程数。
pm.max_spare_servers :动态方式下最大的fpm空闲进程数。
注:意向条数要根据服务器的内存与服务器负载进行调整。

示例

服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G 处理比较慢

优化参数调整:
[root@localhost ~] vim /usr/local/php5/etc/php-fpm.conf
	pm=dynamic
	pm=start_servers= 5
	pm.min_spare_servers= 2
	pm.max_spare_servers= 8

十、自定义错误页面

[root@localhost ~] vim /usr/local/nginx/conf/nginx.conf
 56         error_page 403 404              /404.html;
 57         location = /404.html {
 58                 root html;
 59         }
[root@localhost html]# echo "Sorry,not Found" > /usr/local/nginx/html/404.html
[root@localhost html]#killall -HUP nginx

浏览器访问 http://192.168.1.6/abc
返回结果: Sorry,not Found

十一、自动索引

[root@localhost ~] vim /usr/local/nginx/conf/nginx.conf
 44         location /abc {
 45         autoindex on;
 46         }
[root@localhost ~] cd /usr/local/nginx/html/
[root@localhost html] mkdir abc/dir{1,2} -p
[root@localhost html] touch abc/1.txt
[root@localhost html] touch abc/2.txt
[root@localhost html] killall -HUP nginx

浏览器访问 http://192.168.1.6/abc

你可能感兴趣的:(Linux)