Linux运维之nginx常用模块
- nginx中I/O复用原理
- I/O的5种模式对比
- nginx的master process和worker process调用
调用流程:
配置步骤:
自行准备好nginx相关的源码包
解压nginx1.14版本
并修改gcc文件,减少安装大小加快安装
tar zxf nginx-1.14.2.tar.gz
cd nginx-1.14.2
ls
vim auto/cc/gcc
#CFLAGS="$CFLAGS -g"
安装编译过程中有依赖性的软件及支持模块的软件(自行准备)
yum install pcre-devel openssl-devel gcc -y
yum install gd-devel-2.0.35-26.el7.x86_64.rpm -y
开始编译安装
./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module
make && make install
创建nginx用户,设置软连接
进入好安装好的nginx目录并编写配置文件nginx.conf
useradd nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
cd /usr/local/nginx/
vim conf/nginx.conf
更改如下:
user nginx nginx
暂时关闭nginx虚拟机,打开virt-manager
为nginx虚拟机添加cpu核 设置完毕店家右下角apply,重新开启nginx虚拟机
重新编写nginx配置文件
并开启nginx
vim /usr/local/nginx/conf/nginx.conf
worker_processes auto;
nginx
查看进程
可明显发现有1个master4个work
ps -ef
再次编写配置文件
并检测语法重启nginx
vim /usr/local/nginx/conf/nginx.conf
worker_cpu_affinity 0001 0010 0100 1000;
events {
worker_connections 10240;
}
nginx -t
nginx -s reload
设定文件系统
syscrl -a | grep file ##查看最大支持
ulimit -a ##查看当前
ulimit -n 10240 #设定为10240
ulimit -a ##再次查看
查看是否work设置成功
(如果设定不成功,请锡安关闭nginx并再次开启查看或者在/etc/security/limits.conf修改)
ps aux
cat /proc/2153/limits
设定工作方式为epoll
并进行压力测试
vim /usr/local/nginx/conf/nginx.conf
events {
use epoll;
worker_connections 10240;
}
nginx -t
nginx -s reload
查看压力测试前nginx相关日志大小
cd /usr/local/nginx/logs
du -sh access.log
在真机进行压力测试
ab -c 1 -n 3000 http://172.25.11.1/index.html
nginx虚拟机再次查看日志大小
cd /usr/local/nginx/logs
du -sh access.log
引申:如何在每日的24:00即次日的0:00保存命名为当日的nginx日志?
mv access.log `date +%F -d -1day`_access.log
引申:如何用命令查看主及cpu内核数量?
cat /proc/cpuinfo | grep 'processor' | wc -l
- nginx中限制连接和请求的设定
编写nginx配置文件
设定一个客户端只能有一个并发,多了则会报错
vim /usr/local/nginx/conf/nginx.conf
新添加如下:
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
location /download {
limit_conn addr 1;
}
nginx -t
nginx -s reload
说明
limit_conn_zone:用来限制同一时间的连接数,即并发数
$binary_remote_addr:是限制同一客户端
zone=addr:10m;:表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次
limit_req_zone:用来限制代为时间的请求数,即速率的限制
rate=1r/s;:1s中不超过一个请求
新创建发布目录并将一张图片拷贝过来
cd /usr/local/nginx/html
mkdir download
cd download/
cp /nginx/vim.jpg .
设定限制带宽,美妙最到50s
vim /usr/local/nginx/conf/nginx.conf
location /download {
limit_rate 50k;
}
nginx -t
nginx -s reload
- nginx的端口转发
再开启一台虚拟机server2
在此台机器对nginx进行编译安装,过程参照上方
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
编写如下
user nginx nginx;
http {
include mime.types;
default_type application/octet-stream;
upstream cc {
server 172.25.11.1:80;
}
server {
listen 80;
server_name www.cc.com;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://cc;
}
}
}
nginx -t
nginx -s reload
在server1上同样对nginx配置文件编写
vim /usr/local/nginx/conf/nginx.conf
编写如下:
server {
listen 80;
server_name localhost;
set_real_ip_from 172.25.11.2;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
location /download {
#limit_conn addr 1;
limit_rate 50k;
}
nginx -t
nginx -s reload
在server1上编写默认发布页面:
cd /usr/local/nginx/html
>index.html
vim index.html
server1
测试:
在真机器上设定本地解析并测试
vim /etc/hosts
172.25.11.2 www.cc.com
curl www.cc.com
- nginx的热更新
热更新:在不关闭原nginx服务的前提下,对nginx进行更新升级
查看当前nginx版本信息(安装nginx时没有删除版本信息)
nginx -V
将之前做过的软连接的nginx命令重命名备份,防止更新过后混淆
cd /usr/local/nginx/sbin
cp nginx nginx.old
准备好需要更新的nginx1.15版本的压缩包
解压并编译安装 切忌不要删除nginx版本信息,否则效果查看不出来
tar zxf nginx-1.15.9.tar.gz
cd nginx-1.15.9
vim auto/cc/gcc
./configure --prefix=/usr/local/nginx/
make ##不需要make install
编译安装好把nginx1.15版本的nginx命令发送到/usr/local/nginx/sbin/下
cd /nginx/nginx-1.15.9
cd objs/
cp -f nginx /usr/local/nginx/sbin/nginx
y 覆盖
查看进程并执行kill信号操作
ps aux 查看进程
kill -USR2 2240
kill -WINCH 2240
查看进程父子关系
ps -ef
执行nginx发现报错
注释掉相关的内容并重启服务并查看版本
nginx
nginx -s reload
nginx -V
- 限制网页图片大小
编写配置文件:
vim /usr/local/nginx/conf/nginx.conf
load_module modules/ngx_http_image_filter_module.so;
location /download {
image_filter resize 150 100;
}
nginx -t
nginx -s reload
打开浏览器F5刷新,并F12打开点击network查看图片大小并与原图片大小对比
- nginx的网页安全认证(https)
编写配置文件
vim /usr/local/nginx/conf/nginx.conf
server {
listen 443 ssl;
server_name www.cc.com;
ssl_certificate cert.pem;
ssl_certificate_key cert.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /web;
index index.html index.htm;
}
}
}
nginx -t
nginx -s reload
生成安全认证文件
cd /etc/pki/tls/certs
make cert.pem
根据提示输入
cn
shaanxi
xi'an
cc
linux
server1
root@cc.com
cp cert.pem /usrl/local/nginx/conf/
创建发布目录并编写网页
检测语法并重启nginx
mkdir /web
vim /web/index.html
https:server1
nginx -t
nginx -s reload
做好真机本地解析
打开浏览器测试
- nginx网页重写
编写配置文件
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.cc.com;
rewrite ^/(.*)$ https://www.cc.com/$1 permanent;
}
nginx -t
nginx -s reload
用真机测试:
发现输出www.cc.com域名自动跳转https:172.25.11.1
curl -I www.cc.com
设置不同域名重写
server {
listen 80;
server_name www.cc.com;
#rewrite ^/(.*)$ https://www.cc.com/$1 permanent;
rewrite ^/bbs$ https://bbs.cc.com/index.html permanent;
}
}
nginx -t
nginx -s reload
创建发布目录并编写网页
mkdir /bbs
vim bbs/index.html
bbs.cc.com
在真机做本地解析并测试:
编写配置文件
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.cc.com bbs.cc.com;
#rewrite ^/(.*)$ https://www.cc.com/$1 permanent;
#rewrite ^/bbs$ https://bbs.cc.com/index.html permanent;
if ($host = "bbs.cc.com") {
rewrite ^/(.*)$ http://www.cc.com/bbs/$1 permanent;
}
location / {
root /web;
index index.html;
}
}
}
nginx -t
nginx -s reload
创建发布目录并编写网页
mkdir /bbs
vim bbs/index.html
bbs.cc.com
在真机做好本地解析并测试
curl -I bbs.cc.com
- nginx盗链图片
再另一台需要盗链的虚拟机设置nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name daolian.cc.com;
charset utf-8;
location / {
root /web;
index index.html;
}
}
}
编写盗链网页
mkdir /web
vim /web/index.html
<html>
<body>
<br>盗链图片</br>
<img src="http://www.cc.com/vim.jpg">
</body>
</html>
nginx -t
nginx -s reload
在server1注释掉之前重写的内容
并在/web放入一张图片
在真机做好本地解析并打开浏览器测试
- 图片防盗链
需要在被盗链的nginxweb端即server1设置
vim /usr/loca/nginx/conf/nginx.conf
location ~* \.(gif|jpg|png|jpeg)$ {
root /web;
valid_referers none blocked www.cc.com;
if ($invalid_referer) {
return 403;
}
}
}
}
nginx -t
nginx -s reload
刷新网页查看效果
- END