企业运维实战LAMP架构–nginx的安装以及配置
安装nginx
tar zxf nginx-1.20.1.tar.gz
cd nginx-1.20.1 解压并进入目录
源码编译三部曲-1.configure
./configure --help
./configure --prefix=/usr/local/nginx (编译路径)
通过几次尝试随后会提示缺少以下组件,安装它们
yum install gcc -y
yum install pcre-devel -y
yum install zlib-devel -y
安装常用的一些功能
yum install openssl-devel -y
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
源码编译三部曲-2. make
make
源码编译三部曲-3. make install
make install
初始安装完毕
cd /usr/local/nginx/sbin
./nginx 开启nginx服务
测试:
curl 172.25.76.1
netstat -antlupe 查看端口,默认为80./nginx -s stop 关闭服务
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 创建软链接(方便全剧开启nginx)
测试:
curl -I 172.25.76.1
修改相关配置可降低被攻击的机会
1.关闭c语言编译debug
nginx -s stop
vim ~/nginx-1.20.1/auto/cc/gcc
注释掉
cd nginx-1.20.1
make clean
2.修改相关配置使其不显示版本
vim ~/nginx-1.20.1/src/core/nginx.h
将NGINX_VERSION删掉
nginx 打开nginx
du -h /usr/local/nginx/sbin/nginx 查看大小
小了很多 也提高了安全性
nginx开机自动启动设置
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload 刷新服务列表
systemctl enable --now nginx 开机启动nginx
**
nginx的配置管理
**
1.nginx并发优化
Linux下高并发socket最大连接数所受的各种限制
ulimit -a 查看修改用户进程可打开文件书限制
修改用户进程可打开文件数限制
vim /etc/security/limits.conf
vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; 工作进程数 不超过cpu个数
events {
worker_connections 65535; 单个工作进程并发连接数
}
查看最大打开文件数限制
sysctl -a | grep file
2.nginx反向代理 负载均衡
实验环境需要:三台虚拟机
server1 nginx反向代理加负载均衡主机
server2 nginx服务
server3 httpd服务
server1:
vim /usr/local/nginx/conf/nginx.conf
21upstream westos {
22 server 172.25.76.2:80 weight=2; ##修改权重,172.25.76.2的权重为2,有三分之二的几率被访问,172.25.21.3默认为1,有三分之一的几率被访问
23 server 172.25.76.3:80;
24}
151server {
152 listen 80;
153 server_name www.westos.org;
160
161 location / {
162 proxy_pass http://westos;
163 }
nginx -t 检测语法
nginx -s reload 刷新nginx服务
server2:
安装nginx
cd /usr/local/nginx/html/
echo server3 > index.html
nginx #开启服务
server3:
安装apache服务,编写默认发布文件、开启服务
yum install httpd -y
cd /var/www/html/
echo server3 > index.html
systemctl enable --now httpd.service
主机:
vim /etc/hosts 域名解析
测试:
[root@foundation76 Desktop]# curl www.westos.org
server2
[root@foundation76 Desktop]# curl www.westos.org
server3
[root@foundation76 Desktop]# curl www.westos.org
server3
[root@foundation76 Desktop]# curl www.westos.org
server2
[root@foundation76 Desktop]# curl www.westos.org
server2
[root@foundation76 Desktop]# curl www.westos.org
server2
[root@foundation76 Desktop]# curl www.westos.org
server3
配置成功
3. nginx平滑升级
准备新版本1.21.1的源代码编译包
nginx-1.21.1.tar.gz
进入解压后的目录,修改相关配置
vim auto/cc/gcc
把debug注释掉
配置
./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx
编译
make
不要make install
保存备份老版本nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-old
将生成的nginx去覆盖安装目录下的老的nginx
\cp -f objs/nginx /usr/local/nginx/sbin/nginx
获取当前nginx主进程pid
ps ax|grep nginx
升级新程序
kill -USR2 3124
#SIGUSR2 用户自定义信号 默认处理:进程终止
查看新程序
ps ax|grep nginx
关闭原worker进程但保留主进程,目的是有机会可以回退
kill -WINCH 3124
测试:curl -I 172.25.76.1
显示版本已经到1.21.1
版本回退:
使用刚刚提前保存好老版本的nginx-old
进入 /usr/local/nginx/sbin/
还原nginx程序: cp -f nginx-old nginx
唤醒原进程: kill -HUP 老版本id
回收新版本的master进程:kill -WINCH 3150
关闭新版本主进程:kill -QUIT 3150
测试:curl -I 172.25.76.1’
4. nginx限流
vim /usr/local/nginx/conf/nginx.conf
23 limit_conn_zone $binary_remote_addr zone=addr:10m; #
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 限制访问频次,这里限制每秒1次
41 server {
42 location /download {
43 limit_conn addr 1; #限制并发次数
44 limit_rate 50k;#限制带宽
limit_req zone=one;
limit_req zone=one burst=5;
limit_req zone=one burst=5 nodelay;
45 }
46
47 }
5. nginx配置管理
为了下载方便
自动索引
vim /usr/local/nginx/conf/nginx.conf
server {
location /download {
autoindex on; #自动索引
}
}
nginx -t
nginx -s reload
测试: http://172.25.76.1/download
6. nginx expire缓存配置
当用户再次访问网站时,缓存可以加速用户访问。
location ~ .*\.(gif|jpg|png)$ {
expires 365d;
root /www;
}
测试:
返回码200,表示成功, expires显示到明年九月六日到期
7. 日志轮询
编写脚本:
nginx_log.sh
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day ####表示当前日期减1天).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid ####查看nginx进程号`
禁用不必要日志记录
location ~ .*\.(js|jpg|jpeg|png|css|bmp|gif)$ {
access_log off;
}
##中文乱码
charset utf-8;
修改完后记得删掉浏览器缓存重新打开网页
##限制IP访问
location / {
deny 172.25.0.10;
allow 172.25.0.0/24;
deny all;
}
if ($remote_addr = 172.25.0.254) {
return 403;
}
8.重定向
作用:防止域名恶意解析到服务器IP
server {
listen 80;
server_name localhost;
return 500;
}
即刷新服务后再访问localhost时,会显示500错误
也可以重定向到指定网站
server {
listen 80;
server_name localhost;
rewrite ^(.*) http://www.westos.org permanent;
}
##80重定向到443
vim /usr/local/nginx/conf/nginx.conf
生成https证书
mv cert.pem /usr/local/nginx/conf/
nginx -t
nginx -s reload
server {
listen 80;
server_name www.westos.org;
location / {
# proxy_pass http://westos; # 反向代理器proxy_pass
rewrite ^/(.*)$ https://www.westos.org/$1 permanent; #将所有访问
转到https端口
刷新后
##虚拟主机重定向
www.westos.org/bbs 重定向bbs.westos.org:
编辑bbs的默认发布文件
mkdir /usr/local/nginx/html/bbs
vim /usr/local/nginx/html/bbs/index.html
bbs page
测试:
curl -I www.westos.org/bbs
bbs.westos.org 重定向www.westos.org/bbs:
if ($host = "bbs.westos.org"){
rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent; # bbs.westos.org
----> www.westos.org/bbs
}
刷新服务后
在主机:
vim /etc/hosts
172.25.76.1 www.westos.org bbs.westos.org
9.防盗链
在server2的发布目录创建一个盗链文件
vim /usr/local/nginx/conf/nginx.conf
location ~ \.(jpg|png)$ {
valid_referers none blocked www.westos.org;
if ($invalid_referer) {
return 403;
#rewrite ^/ http://www.westos.org/daolian.jpg;
}
}
http状态码
1开头 保留
2开头 成功访问
3开头 重定向
4开头 请求(客户)错误
5开头 服务器错误