nginx源码安装部署

wget -c http://nginx.org/download/nginx-1.21.1.tar.gz
yum install pcre pcre-devel gcc zlib-devel openssl openssl-devel -y
tar xzvf nginx-1.21.1.tar.gz -C /opt
cd /opt/nginx-1.21.1/
./configure --prefix=/usr/local/nginx #安装目录配置
make && make install
nginx启停
/usr/local/ngxin/sbin/nginx //启动服务
./nginx -s stop //快速停止
./nginx -s quit //优雅的退出 客户在执行任务后退出
./nginx -s reload 修改配置文件后重新加载
nginx-system管理
vim /usr/lib/systemd/system/nginx.service 
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target

systemctl daemon-reload #配置完成后加载
systemctl enable nginx #开机自启动
nginx配置文件
#主要由三部分组成
vim /usr/local/nginx/conf/nginx.conf 
第一部分:全局块
#user nobody; #设置用户
worker_processes 5; #这是nginx服务器并发处理服务的关键配置,值越大,可以支持的并发处理量也就越多,但是会受到硬件、软件等设备的制约
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#第二部分:events块
events {
worker_connections 1024; #events块影响的主要是nginx服务器与用户的网络连接,上述例子就表示最大连接数为1024
}
#第三部分:http块
http {
include mime.types; #引入mimt.types文件类型后缀
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on; #少了一次读到应用内存的次数
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65; #保持连接
#gzip on;
server{
#主机配置
#Localtion{
#配置
}
}
}
#第4部分:server块
server {
listen 80; #监听80端口
server_name 192.168.145.164; #服务器名称
#设置访问日志和错误日志的路径默认在/usr/local/nginx/logs/

}

image-20240704155508917

#第5部分:location块
location /abc
以下访问都是正确的
#http://192.168.2.4/abc
#http://192.168.2.4/abc?p1=TOM
#http://192.168.2.4/abc/
#http://192.168.2.4/abcdef
location =/abc
可以匹配到
http://192.168.2.4/abc
http://192.168.2.4/abc?p1=TOM
匹配不到
http://192.168.2.4/abc/
http://192.168.2.4/abcdef
location ~^/abc\w$			#~用于表示当前uri中包含了正则表达式,并且区分大小写
location ~*^/abc\w$ #~*: 用于表示当前uri中包含了正则表达式,并且不区分大小写
location ^~/abc #^~: 用于不包含正则表达式的uri前,功能和不加符号的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了
root/alias指令
root						#设置请求的根目录
alias #用来更改location的URI

#举例说明 :在/usr/local/nginx/html目录下创建一个 images目录,并在目录下放入一张图片mv.png图片
location /images {
root /usr/local/nginx/html;

#root的访问图片的路径为 http://ip/images/mv.png
#如果把root改为alias,再次访问上述地址,页面会出现404的错误,需要在alias后面路径改为
location /images {
alias /usr/local/nginx/html/images;
index指令
#设置网站的默认首页,index后面可以跟多个设置,如果访问的时候没有指定具体访问的资源,则会依次进行查找,找到第一个为止。
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
访问该location的时候,可以通过 http://ip:port/,地址后面如果不添加任何内容,则默认依次访问index.html和index.htm,找到第一个来进行返回
rewrire指令
Nginx rewrire技术主要是实现URL地址重写,且⽀持正则表达式的规则。 通过rewrite可以规范URL、根据变量进⾏URL跳转等,常⽤的功能如
对于爬⾍的封禁,让其跳转无用页面
动态的URL伪装成HTMl⻚⾯,便于搜索引擎的抓取
旧域名、旧⽬录的更新,需要跳转到新的URL地址
rewrite ^/(.*) http://www.baidu.com/$1 permanent;
last
规则匹配完成后,继续向下匹配新的 Locaiton
break
本条规则完成匹配后,⽴即停⽌
redirect
返回 302 临时重定向,浏览器地址栏显示跳转后的 URL
permanent
返回 301 永久重定向,浏览器地址显示跳转后的 URL
last和break⽤于实现URL重写,浏览器地址栏不发⽣变化
redirect和permanent⽤于实现URL跳转,浏览器地址栏跳转新的URL
反向代理

192.168.145.164 #nginx服务器
192.168.145.165 #tomcat9 端口8080

#192.168.145.165安装部署tomcat操作
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.90/bin/apache-tomcat-9.0.90.tar.gz
tar xzvf apache-tomcat-9.0.90.tar.gz
mv apache-tomcat-9.0.90 /usr/local/tomcat9/
cd /usr/local/tomcat9/
/usr/local/tomcat9/bin/startup.sh
tail -300f /usr/local/tomcat9/logs/catalina.out
netstat -nltp|grep 8080

192.168.145.164 #nginx服务器操作
-----------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name 192.168.145.164;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://192.168.145.165:8080; #反向代理
}
负载均衡

192.168.145.164 #nginx服务器

192.168.145.165 #tomcat9 端口8080,tomcat9_1 端口8081

#与server同级
upstream httpds { #负载池名
server 192.168.145.165:8080 Weight =10; #应用服务器也可以一台不同的端口
server 192.168.145.165:8081;
server {
listen 80;
server_name 192.168.145.164; #本机当前ip
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://httpds; #负载upstream池的名与对应
}
}
负载均衡常用策略
Weight =10 					#权重
Down #不参与
Backup #备用不参与,挂了顶上
Ip_hash #保持会话
Least_conn #最小连接访问
Url_hash #根据用户访问的url定向转发请求
Fair #根据后端服务器响应时间转发请求
动静分离

配置高可用集群
yum install keepalived -y
vim /etc/keepalived/keepalived.conf
#Masker
yum install keepalived -y
vim /etc/keepalived/keepalived.conf
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2 #检测时间间隔
weight -10 #如果条件成立的话,则权重 2
fall 2 #需要失败2次,vrrp才进行角色状态切换
rise 2 #需要成功2次,vrrp才进行角色状态切换
}
vrrp_instance VI_1 {
state MASTER #BACKUP
interface ens33 #网口
virtual_router_id 51
priority 100 #备机99
advert_int 1
authentication { #一组里的认证配置
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx
}
virtual_ipaddress {
192.168.1.22 #虚拟ip
}
}
systemctl restart keepalived.service
systemctl reload keepalived.service

写一个检测服务器是否还活着的脚本,放在上图中提到的 vim /etc/keepalived/nginx_check.sh 路径下面

vim /etc/keepalived/check_nginx.sh

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
#systemctl restart nginx #测试的时候注释
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived #pkill和killall不会杀死不完整的进程名
#yum install psmisc安装killall
fi
fi
-----------------------------------------------------------------------------------------
cd /etc/keepalived && chmod 777 check_nginx.sh
systemctl restart nginx
systemctl restart keepalived.service
nginx优化详解
worker_processes 4;   		#调整工作进程数
worker_connections 1024; #表示将每个工作进程的线程数设置为1024,线程数并不是越大越好,因为线程之间的竞争可能会导致性能下降。因此,需要根据实际情况进行调整
启用Gzip压缩
./configure --with-http_gzip_static_module --with-http_gzip_module
make && make install
配置Gzip压缩
http {
gzip on; #启用gzip压缩
gzip_types text/plain text/css application/javascript application/xml; #指定需要压缩的文件类型
gzip_min_length 1000; #指定压缩文件的最小长度,小于该值的文件不会被压缩
gzip_comp_level 6; #指定压缩级别,范围是1到9,数字越大压缩比越高,但同时也消耗更多的CPU资源
gzip_vary on; #响应头中添加Vary: Accept-Encoding,以便告诉缓存服务器根据不同的Accept-Encoding来缓存不同版本的内容
gzip_disable "MSIE [1-6]\."; #指定一些浏览器(如旧版的IE)不使用gzip压缩
gzip_proxied any; #指定在代理服务器上启用gzip压缩。
}

--------------------------------------------------------------------------
#配置浏览器缓存时间
location ~* \.(jpg|jpeg|gif|png|css|js)$ {
add_header Cache-Control "public, max-age=31536000"; # 设置静态资源的缓存时间为1年(单位:秒)
}
配置代理服务器缓存时间
location / {
proxy_pass http://backend; # 将请求转发到后端服务器
proxy_cache mycache; # 启用缓存,命名为mycache
proxy_cache_valid 200 302 60m; # 设置缓存有效时间为60分钟(单位:秒)
proxy_cache_valid 404 1m; # 设置缓存有效时间为1分钟(单位:秒)
}
优化日志配置调整日志级别
http {
...
log_level info; # 将日志级别设置为info
...
}
配置日志切割和压缩
http {
...
access_log /var/log/nginx/access.log combined buffer=32k flush=1m; # 配置访问日志切割和压缩功能
error_log /var/log/nginx/error.log info; # 配置错误日志,并设置日志级别为info
...
}
nginx常用模块
autoindex   								#下载
ngx_http_access_module #做接入控制
ngx_http_auth_basic_module #验证登录
Module ngx_http_stub_status_module nginx #状态监测