编辑
2023-02-01
nginx
00

目录

Nginx
1、Web请求流程图
2、 编译安装nginx和常用参数解读
2.1 编译安装在nginx介绍里已经说过了,这里直接上安装脚本
2.2 Nginx编译常用参数解读
3.nginx完成动静分离部署lamp。php到后端php-fpm
3.1 安装httpd
3.2 安装php-fpm服务并准备php页面
3.3 编译安装nginx
4、nginx 利用rewrite完成 全栈ssl配置
5、通过zabbix监控nginx状态,web网站健康状态。
5.1 在nginx上安装zabbix-agent2软件包并配置服务器地址
5.2 zabbix-server上添加该主机,挑选一个主机直接克隆。修改一下IP即可。

Nginx

1、Web请求流程图

web请求.jpg

2、 编译安装nginx和常用参数解读

2.1 编译安装在nginx介绍里已经说过了,这里直接上安装脚本

shell
#!/bin/bash # #******************************************************************** #Author: zhangwei #QQ: 200957079 #Date: 2020-12-01 #FileName: install_nginx.sh #URL: http://vanblog.ztunan.top #Description: The test script #Copyright (C): 2021 All rights reserved #******************************************************************** SRC_DIR=/usr/local/src NGINX_URL=http://nginx.org/download/ NGINX_FILE=nginx-1.20.2 #NGINX_FILE=nginx-1.18.0 TAR=.tar.gz NGINX_INSTALL_DIR=/apps/nginx CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'` . /etc/os-release color () { RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m" SETCOLOR_WARNING="echo -en \\033[1;33m" SETCOLOR_NORMAL="echo -en \E[0m" echo -n "$1" && $MOVE_TO_COL echo -n "[" if [ $2 = "success" -o $2 = "0" ] ;then ${SETCOLOR_SUCCESS} echo -n $" OK " elif [ $2 = "failure" -o $2 = "1" ] ;then ${SETCOLOR_FAILURE} echo -n $"FAILED" else ${SETCOLOR_WARNING} echo -n $"WARNING" fi ${SETCOLOR_NORMAL} echo -n "]" echo } os_type () { awk -F'[ "]' '/^NAME/{print $2}' /etc/os-release } os_version () { awk -F'"' '/^VERSION_ID/{print $2}' /etc/os-release } check () { [ -e ${NGINX_INSTALL_DIR} ] && { color "nginx 已安装,请卸载后再安装" 1; exit; } cd ${SRC_DIR} if [ -e ${NGINX_FILE}${TAR} ];then color "相关文件已准备好" 0 else color '开始下载 nginx 源码包' 0 wget ${NGINX_URL}${NGINX_FILE}${TAR} [ $? -ne 0 ] && { color "下载 ${NGINX_FILE}${TAR}文件失败" 1; exit; } fi } install () { color "开始安装 nginx" 0 if id nginx &> /dev/null;then color "nginx 用户已存在" 1 else useradd -s /sbin/nologin -r nginx color "创建 nginx 用户" 0 fi color "开始安装 nginx 依赖包" 0 if [ $ID == "centos" ] ;then if [[ $VERSION_ID =~ ^7 ]];then yum -y -q install make gcc pcre-devel openssl-devel zlib-devel perl-ExtUtils-Embed elif [[ $VERSION_ID =~ ^8 ]];then yum -y -q install make gcc-c++ libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel perl-ExtUtils-Embed else color '不支持此系统!' 1 exit fi elif [ $ID == "rocky" ];then yum -y -q install make gcc-c++ libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel perl-ExtUtils-Embed else apt update &> /dev/null apt -y install make gcc libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev &> /dev/null fi cd $SRC_DIR tar xf ${NGINX_FILE}${TAR} NGINX_DIR=`echo ${NGINX_FILE}${TAR}| sed -nr 's/^(.*[0-9]).*/\1/p'` cd ${NGINX_DIR} ./configure --prefix=${NGINX_INSTALL_DIR} --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module make -j $CPUS && make install [ $? -eq 0 ] && color "nginx 编译安装成功" 0 || { color "nginx 编译安装失败,退出!" 1 ;exit; } echo "PATH=${NGINX_INSTALL_DIR}/sbin:${PATH}" > /etc/profile.d/nginx.sh cat > /lib/systemd/system/nginx.service <<EOF [Unit] Description=The nginx HTTP and reverse proxy server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=${NGINX_INSTALL_DIR}/logs/nginx.pid ExecStartPre=/bin/rm -f ${NGINX_INSTALL_DIR}/logs/nginx.pid ExecStartPre=${NGINX_INSTALL_DIR}/sbin/nginx -t ExecStart=${NGINX_INSTALL_DIR}/sbin/nginx ExecReload=/bin/kill -s HUP \$MAINPID KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true LimitNOFILE=100000 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now nginx &> /dev/null systemctl is-active nginx &> /dev/null || { color "nginx 启动失败,退出!" 1 ; exit; } color "nginx 安装完成" 0 } check install

2.2 Nginx编译常用参数解读

  • --with-http_ssl_module:支持SSL/TLS协议,提供安全的HTTPS服务。
  • --with-http_realip_module:支持获取真实客户端IP地址,可用于解决CDN、反向代理等环境下的IP获取问题。
  • --with-http_gzip_static_module:支持预压缩静态文件,可以提高文件传输速度,节省带宽。
  • --with-stream_ssl_module:支持SSL/TLS协议,提供安全的TCP/UDP服务。
  • --with-http_stub_status_module:支持查看Nginx状态信息,可以用于监控和调试。
  • --with-http_sub_module:支持在响应内容中进行字符串替换,可用于修改HTML、CSS等文件中的URL、域名等信息。
  • --with-http_auth_request_module:支持使用子请求进行用户认证,提供灵活的认证方式。 以下是一些常用的Nginx第三方模块:
  • ngx_http_upstream_check_module:实现主动健康检查,可以检查后端服务器是否正常工作,并自动剔除故障服务器。
  • ngx_http_geoip2_module:支持使用MaxMind GeoIP2数据库,将IP地址转换为地理位置信息。
  • ngx_http_vod_module:支持HLS点播,可以对媒体文件进行切片,提供快速的点播服务。
  • ngx_http_redis_module:支持使用Redis作为缓存,提高访问速度和并发处理能力。
  • ngx_http_auth_pam_module:支持使用PAM进行用户认证,提供灵活的认证方式。
  • ngx_http_substitutions_filter_module:支持在响应内容中进行字符串替换,可用于修改HTML、CSS等文件中的URL、域名等信息。
  • ngx_http_ssl_module:支持SSL/TLS协议,提供安全的HTTPS服务。
  • ngx_http_headers_more_filter_module:支持在响应头中添加、修改和删除HTTP头信息,可用于添加跨域头、安全头等信息。

3.nginx完成动静分离部署lamp。php到后端php-fpm

环境

三台服务器均为rocky8.5系统
Nginx:10.0.0.136
httpd:10.0.0.130
php-fpm:10.0.0.140

3.1 安装httpd

  1. 直接使用yum安装即可,并设置开机自启
yum -y install httpd systemctl enable --now httpd
  1. 测试页面

nginx-httpd.jpg

3.2 安装php-fpm服务并准备php页面

  1. 安装和设置开机自启
yum -y install php-fpm systemctl enable --now php-fpm
  1. 修改php配置文件

注意

需要注意,如果php和nginx在一台服务器上,那php配置文件中的用户和组必须改为nginx,和nginx保持一致。如果不在一台上就无所谓了。

cat /etc/php-fpm.d/www.conf [www] user = apache group = apache ; listen = /run/php-fpm/www.sock ;listen = 127.0.0.1:9000 listen = 9000 listen.acl_users = apache,nginx ; listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.status_path = /pm_status ping.path = /ping ping.response = ping-pong slowlog = /var/log/php-fpm/www-slow.log php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache php_value[upload_max_filesize] = 20m php_value[post_max_size] = 20m php_value[date.timezone] = Asia/Shanghai
  1. 准备php页面
#创建目录 [root@rocky7 ~]#mkdir /data/php #创建页面文件 [root@rocky7 ~]#vim /data/php/index.php <?php phpinfo(); ?> #重启php服务 [root@rocky7 ~]#systemctl restart php-fpm

3.3 编译安装nginx

  1. 上面提供了脚本,这里就不再说安装过程了。直接上配置
  2. 默认的配置文件就不动了,在conf.d下重新创建一个conf配置文件
cat conf.d/static.conf server { listen 80; server_name zhang.nginx.org; #接收的主机头名称 location / { proxy_pass http://10.0.0.130; #静态代理地址 index index.html; } location ~ \.php$ { root /data/php; #这个目录是在php服务器上,不在本地,规定了php服务器的默认目录 fastcgi_pass 10.0.0.140:9000; #php服务器地址 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fastcgi变量,具体信息在conf文件加下的fastcgi_params中 include fastcgi_params; } }
  1. nginx服务器配置完成,测试页面

注意

这里使用的域名是zhang.nginx.org,修改Windows默认的hosts文件或者使用SwitchHost软件解析域名对应的地址即可

  • 访问默认静态页面

nginx-static.jpg

  • 访问动态php页面

nginx-php.jpg

4、nginx 利用rewrite完成 全栈ssl配置

rewrite功能依赖于ngx_http_rewrite_module模块,rewrite将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为表达式指定的新的URI

  1. 上面的例子中已经可以实现nginx的访问了。这里说SSL的配置和rewrite。
  2. 使用openssl命令获得自签署证书
# 获得自签署证书和key openssl req -newkey rsa:4096 -nodes -sha256 -keyout zhang.nginx.org.key -x509 -days 3650 -out zhang.nginx.org.crt # 查看证书文件 [root@rocky4 ssl]#ll total 8 -rw-r--r-- 1 root root 2033 May 16 10:21 zhang.nginx.org.crt -rw------- 1 root root 3272 May 16 10:20 zhang.nginx.org.key
  1. 修改配置文件,让nginx支持ssl,并在用户使用http(80)访问时自动跳转到https(443)上
server { listen 80; listen 443 ssl http2; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_certificate /apps/nginx/ssl/zhang.nginx.org.crt; ssl_certificate_key /apps/nginx/ssl/zhang.nginx.org.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; server_name zhang.nginx.org; if ($scheme = http){ rewrite ^/(.*)$ https://zhang.nginx.org/$1 redirect; } location / { proxy_pass http://10.0.0.130; index index.html; } location ~ \.php$ { root /data/php; fastcgi_pass 10.0.0.140:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
  1. 测试
  • 这里看到访问的是80端口,但是302被重定向了。 nginx-rewrite.jpg
  • 重定向到443端口,响应码200 nginx-rewrite1.jpg

5、通过zabbix监控nginx状态,web网站健康状态。

5.1 在nginx上安装zabbix-agent2软件包并配置服务器地址

# 安装软件包 [root@rocky4 ssl]#yum -y install zabbix-agent2 # 修改配置文件 [root@rocky4 ssl]#grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf PidFile=/var/run/zabbix/zabbix_agent2.pid LogFile=/var/log/zabbix/zabbix_agent2.log LogFileSize=0 #修改server地址 Server=10.0.0.129 ServerActive=127.0.0.1 #修改为本地IP地址 Hostname=10.0.0.136 Include=/etc/zabbix/zabbix_agent2.d/*.conf ControlSocket=/tmp/agent.sock #启动服务 [root@rocky4 ssl]#systemctl enable --now zabbix-agent2 # 查看10050端口是否开启 [root@rocky4 ssl]#ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 511 0.0.0.0:80 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 511 0.0.0.0:443 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 1024 *:10050 *:*

5.2 zabbix-server上添加该主机,挑选一个主机直接克隆。修改一下IP即可。

  • 添加主机 host.jpg

  • 查看触发器,这里触发器存在,测试即可 chufa.jpg

  • 服务器上手动关闭nginx,此时产生报警 zabbix-nginx.jpg

  • 再手动开启nginx,此时报警消失 zabbix-nginx-1.jpg

  • 也可以关联动作,检测到80端口关闭时重启nginx服务。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:笑一个吧~

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 本文为博主「笑一个吧~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 许可协议。转载请注明出处!