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/
}
|
#第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 #状态监测
|