linux三种软件包安装方式
1.准备阶段
wget http://nginx.org/download/nginx-1.18.0.tar.gz(也可以直接在官网自行下载)
yum install gcc -y
2.解压文件
tar zxf nginx-1.20.1.tar.gz 解压安装包并进入
cd nginx-1.20.1/
ls
3.configure:检查系统环境是否符合要求
在开始安装服务之前,需要执行configure脚本,它会自动的对当前系统进行
一系列的评估,如源文件、软件依赖库、编译器、汇编器、连接器检查等等
./configure --help
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
选择的模块含义:
--prefix=/usr/local/nginx #指定安装路径
--with-http_ssl_module #支持https模块
--with-http_stub_status_module #监控模块
--with-threads #支持线程池
--with-file-aio #支持AIO文件
4.解决报错
yum install -y pcre-devel
yum install -y openssl-devel
再次configure后出现makefile文件
5.编译
make
4.安装
make install
5.优化编译
正常编译下是6M,重新关闭调试后为1000k
cd /usr/local/nginx/
du -sh
cd ..
rm -fr nginx
cd ~/nginx-1.18.0/
ls
make clean
ls
vim auto/cc/gcc
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
make
make install
cd /usr/local/nginx/
du -sh
6.设置环境变量
vim .bash_profile
添加这一句::/usr/local/nginx/sbin
source .bash_profile
which nginx
7.启动nginx
nginx -t #首先检查语法
nginx #如果语法没有问题则启动nginx
netstat -antlp | grep :80
ps -ax | grep nginx
安装完pcre包之后再次配置
又开始报错,安装openssl库。
configure成功开始make
开始make install
占用内存变小了
设置环境变量
启动nginx
可以在浏览器查看
1.nginx作为http服务器时:
max_clients = worker_processes * worker_connections
2.nginx作为反向代理服务器时:
max_clients = worker_processes * worker_connections / 2
#这里除以2的原因是nginx做反向代理时既连接客户端也连接后台服务器,消耗两倍的连接量。
1.修改nginx配置文件
cd /usr/local/nginx/conf
vim nginx.conf
nginx -s reload
ps -ax | grep nginx
2.测试nginx的高并发处理能力
补充:ab( apache bench )是apache下的一个工具,主要用于对web站点做压力测试(若使用需安装httpd-tools工具)
基础用法:
-c选项为一次发送的请求数,即并发量
-n选项为请求次数
ab -c1 -n 50000 http://192.168.1.10/index.html
-----
开始优化
3.创建nginx用户
useradd -M -d /usr/local/nginx/ -s /sbin/nologin nginx
-M不要自动建立用户的登入目录,-d指定用户家目录 -s指定用户登入后所使用的shell,这里nginx设置为不能登陆的用户
id nginx
4.修改nginx配置文件
cd /usr/local/nginx/conf
vim nginx.conf
user nginx;
events {
worker_connections 65535; #设置工作的连接数
}
5.设置用户打开文件的数量限制
sysctl -a | grep file #查看系统支持打开文件数量限制
vim /etc/security/limits.conf #设置用户打开文件的数量限制,大于等于上边设置的工作连接数
nginx - nofile 65536
6.刷新
nginx -s reload
7.测试
ab -c1 -n 50000 http://192.168.1.10/index.html
开始压测
开始优化
实际测试并没有快很多,可能是压测的请求数比较小。
nginx反向代理官网
1.修改nginx配置文件
cd /usr/local/nginx/conf
vim nginx.conf
- worker_cpu_affinity 01 10; #1代表内核开启,0代表内核关闭;cpu亲和(绑定)
- multi_accept on; #告诉nginx收到一个新连接通知后接受尽可能多的连接(默认打开)
- use epoll; #使用epoll模型,默认就是使用epoll模型
- 开启文件高效传输模式,同时设置tcp_nopush和tcp_nodelay为on,可以防止网路和磁盘IO阻塞。
sendfile on;
tcp_nopush on;
tcp_nodelay on;
2.检查语法
nginx -t
3.重启服务
nginx -s reload
1.打开server2和server3的apache服务,并写好默认发布文件index.html
yum install -y httpd
systemctl start httpd
echo server2 > /var/www/html/index.html
curl localhost
yum install -y httpd
systemctl start httpd
echo server3 > /var/www/html/index.html
curl localhost
2.修改server1的nginx配置文件
vim nginx.conf
在httpd{
}里面增加一个server服务和负载均衡器lyueyue,是nginx的反向代理服务,当客户机访问www.lyueyue.org时,nginx通过location转发到负载均衡器 lyueyue上
upstream lyueyue {
server 192.168.1.11:80
server 192.168.1.12:80
}
server {
listen 80;
server_name www.lyueyue.org;
location / {
proxy_pass http://lyueyue;
}
}
3.检查语法并重载
nginx -t
nginx -s reload
4.真机
在server4上作解析
5.测试
curl www.lyueyue.org
1.修改nginx配置文件
vim nginx.conf
注意:添加ip_hash时要注释掉backup选项,因为backup不支持ip_hash算法,同时开启会报错。
2.检查配置文件并重载服务
nginx -t
nginx -s reload
3.在server4上测试
for i in {
1..6};do curl www.lyueyue.org;done
1.解压软件
wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip
unzip 08a395c66e42.zip
cd nginx-1.18.0/
make clean
2.重新编译
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make
cd objs/
nginx -s stop
cp nginx /usr/local/nginx/sbin/ -f
nginx -v
nginx
3.修改配置文件
cd /usr/local/nginx/conf
vim nginx.conf
21 sticky;
4.检查配置文件并重载
nginx -t
nginx -s reload
5.测试
curl www.lyueyue.org
1.下载nginx新版本,正常执行./configure和make但不要执行make install
cd nginx-1.19.5/
vim auto/cc/gcc #关闭debug功能
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make
2.备份源程序
cd /usr/local/nginx/sbin
cp nginx nginx.old
3.拷贝新程序
cd nginx-1.19.5/objs
cp -f nginx /usr/local/nginx/sbin
4.获取当前nginx主进程pid
ps ax | grep nginx
5.升级新程序
kill -USR2 119387
ps ax | grep nginx
#kill -USR2 旧版程序的主进程号或进程文件名
#此时旧的Nginx主进程将会把自己的进程文件改名为.oldbin,然后执行新版 Nginx。新旧Nginx会同时运行,共同处理请求
6.查看当前版本
nginx -v
7.关闭原worker进程但保留主进程:为了可以回退
kill -WINCH 119387
ps ax | grep nginx
#kill -WINCH 旧版主进程号
#新版的Nginx的工作进程会逐渐取代旧版工作进程。
1.还原nginx程序
cd /usr/local/nginx/sbin
cp nginx.old nginx
2.唤醒原进程
kill -HUP 119387 #不重载配置启动进程
ps ax | grep nginx
3.回收新版本的worker进程
kill -WINCH 125256
ps ax | grep nginx
4.关闭新版本主进程
kill -QUIT 125256 #从容关闭进程
ps ax | grep nginx
5.查看版本
nginx -v
官方参考手册
1.检查nginx服务启动
ps ax | grep nginx
2.创建download发布目录,并放几张图进去
cd /usr/local/nginx/html/
mkdir download
cd download
chmod 777 *
ll
3.修改nginx配置文件
#$binary_remote_addr 表示通过remote_addr这个标识来做限制
#zone=addr:10m 表示生成一个大小为10M,名字为addr的内存区域
vim nginx.conf
limit_conn_zone $binary_remote_addr zone=addr:10m;
location /download/ {
limit_conn addr 1; #限制并发数
limit_rate 50k; #限制带宽
}
4.重启nginx
nginx -t
nginx -s reload
5.测试
ab -c10 -n10 http://192.168.1.10/download/yueyue.jpg
ab -c1 -n10 http://192.168.1.10/download/yueyue.jpg
重启nginx
开始测试
先在浏览器上访问
使用curl测试
1.修改nginx配置文件
#rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次
#limit_req zone=one; #限制请求数目为1
#limit_req zone=one burst=5 #5个人排队
vim nginx.conf
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req zone=one burst=5;
2.重启nginx
nginx -t
nginx -s reload
3.测试
ab -c1 -n 10 http://192.168.1.10/download/dog.gif
1.查看请求的文件大小
du -sh yueyue.jpg
2.修改nginx配置文件
limit_rate 50k; #限制带宽,其实前面已经用过了。
3.重启nginx
nginx -t
nginx -s reload
4.测试
ab -c1 -n 5 http://192.168.1.10/download/yueyue.jpg
自动索引:方便查询
vim nginx.conf
location / {
autoindex on;
}
Nginx expire缓存配置: 缓存可以降低网站带宽,加速用户访问
vim nginx.conf
location ~ .*\.(gif|jpg|png)$ {
expires 365d;
root /html;
}
1.编写文件
cd /usr/local/nginx/logs
vim /opt/nginxlog.sh
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` #重启
2.再加入crontab定时任务
crontab -e
crontab -l
00 00 * * * /opt/nginxlog.sh &> /dev/null
为了安全,日志目录不需要给你nginx用户访问权限
chmod -R 700 /usr/local/nginx/logs
禁用不必要的日志记录,以节省磁盘IO的消耗
示例一:
location ~ .*\.(js|jpg|jpeg|png|css|bmp|gif)$ {
access_log off;
}
示例二:
location /status {
access_log off; #关闭日志
stub_status on;
allow 127.0.0.1;
deny all;
}
这部分结合上面的截图理解
对站点目录和文件的限制
示例一:
location ~ ^/images/.*\.(sh|php)$ {
deny all;
}
示例二:
location /status {
access_log off;
stub_status on;
allow 127.0.0.1; #只允许本机访问
deny all;
}
中文乱码
charset utf-8;
实验前准备:首先拷贝一份中文文档到发布目录下
在server4上访问发现乱码
重新修改配置文件
再次测试
我们在使用过程中会遇到很多的恶意IP攻击,这个时候就要用到 Nginx 禁止IP访问了。
1.编写文件
vim nginx.conf
禁止通过IP直接访问网站 返回500错误
2.重启服务
nginx -s reload
访问的是ip地址,但是自动重定向到域名。
重定向:
vim nginx.conf
server {
listen 80;
server_name _;
rewrite ^(.*) http://www.lyueyue.org permanent;
}
80重定向443:
1.创建密钥和证书
cd /etc/pki/tls/certs
ls
vim Makefile #Makefile中有生成密钥的方式,所以要到这个目录下生成
make cert.pem
mv cert.pem /usr/local/nginx/conf #将认证文件移到对应的目录
2.修改配置文件
vim nginx.conf
server {
listen 80;
server_name www.lyueyue.org;
rewrite ^/(.*)$ https://www.lyueyue.org/$1 permanent;
}
修改https对应的部分
3.重启nginx
nginx -t
nginx -s reload
4.测试
netstat -antlp #查看443端口是否打开
修改配置文件
上面已经完成了https加密访问,但还需要手动输入https,下面打开http转https,用户直接通过https加密访问服务器。
$1代表匹配所有 / 字符
1.建立默认发布目录
mkdir /bbs
echo bbs.lyueyue.org > /bbs/index.html
2.修改配置文件
vim nginx.conf
www.lyueyue.org/bbs 重定向bbs.lyueyue.org:
server_name www.lyueyue.org;
rewrite ^/bbs$ http://bbs.lyueyue.org permanent;
rewrite ^/bbs/(.*)$ http://bbs.lyueyue.org/$1 permanent;
server {
listen 80;
server_name bbs.lyueyue.org;
location / {
root /bbs;
index index.html;
}
}
3.重启nginx
nginx -t
nginx -s reload
4.测试
curl -I www.lyueyue.org/bbs
curl -I www.lyueyue.org/bbs/index.html
curl http://bbs.lyueyue.org/index.html #这一步需要做host解析
建立默认发布目录
定义一个虚拟主机服务,访问域名是bbs.lyueyue.org ,默认发布目录是/bbs。
测试
1.建立默认发布目录
mkdir /www
echo www.lyueyue.org > /www/index.html
cd /www
mkdir bbs
cd bbs
echo bbs.lyueyue.org-2 > index.html
2.修改配置文件
vim nginx.conf
bbs.lyueyue.org 重定向www.lyueyue.org/bbs:
if ($host = "bbs.lyueyue.org"){
rewrite ^/(.*)$ http://www.lyueyue.org/bbs/$1 permanent;
}
3.重启nginx
nginx -t
nginx -s reload
4.测试
curl -I bbs.lyueyue.org
建立默认发布目录
修改配置文件
重启
测试
在浏览器中访问
输入bbs.lyueyue.org重定向到www.lyueyue.org/bbs
1.修改配置文件
vim nginx.conf
当访问bbs.lyueyue.org时,指向默认目录。
2.重启nginx
nginx -t
nginx -s reload
3.配置server2上的http服务
当访问server2上的http发布文件时,盗链server1(nginx服务)的内容
cd /var/www/html
vim daolian.html
<img src="http://www.lyueyue.org/download/yueyue.jpg"/>
systemctl restart httpd
4.测试
在server4上测试 盗链成功
5.设置防盗链
vim nginx.conf
location ~ \.(jpg|png)$ {
valid_referers none blocked www.lyueyue.org;
if ($invalid_referer) {
return 403;
#rewrite ^/ #或者直接重定向到别的服务器 http://www2.lyueyue.org/daolian.jpg;
}
}
6.重启nginx
nginx -t
nginx -s reload
7.测试
访问图片失败
8.也可以打开重定向,转到其他服务器
这里就不演示了