评论

收藏

[Nginx] nginx实现动静分离的方法示例

web服务器 web服务器 发布于:2021-11-14 21:13 | 阅读数:504 | 评论:0

Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术,本文就详细的介绍一下如何使用,感兴趣的可以了解一下
目录

  • 在server1上部署nginx
  • 在server上部署lnmp
  • node3部署httpd
  • 实现分离部署
本文主要介绍了nginx实现动静分离的方法示例,具有一定的学习价值,具体如下
环境:
系统/主机名IP地址服务Redhat8 :server1192.168.244.131nginxRedhat8:server2192.168.244.133lnmpContent7:node3192.168.244.142httpd在三台主机上关闭防火墙
[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# systemctl disable firewalld
[root@server1 ~]# vim /etc/selinux/config 
SELINUX=disabled
在server1上部署nginx
[root@server1 opt]# cat nginx.sh 
#!/bin/bash
if [ $UID -ne 0 ];then
    echo "Please use administrator account"
    exit
fi
app_a=nginx-1.20.1.tar.gz
dir_a=/usr/local
dir_b=/var/log
dir_c=nginx-1.20.1
if [ ! -d $dir_b/nginx ];then
    mkdir -p $dir_b/nginx
fi
chown -R nginx.nginx $dir_b/nginx
yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++  make
yum -y groups mark install "Development Tools"
id nginx &>/dev/null 
if [ $? -ne 0 ];then
    useradd -r -M -s /sbin/nologin nginx
fi
tar xf bag/$app_a -C $dir_a
cd  $dir_a/$dir_c
if [ ! -d $dir_a/nginx ];then
    ./configure 
        --prefix=$dir_a/nginx 
        --user=nginx 
        --group=nginx 
        --with-debug 
        --with-http_ssl_module 
        --with-http_realip_module 
        --with-http_image_filter_module 
        --with-http_gunzip_module 
        --with-http_gzip_static_module 
        --with-http_stub_status_module 
        --http-log-path=$dir_b/nginx/access.log 
        --error-log-path=$dir_b/nginx/error.log  && make  && make install
fi
cd ..
if [ ! -f /etc/profile.d/nginx.sh  ];then
    echo "export PATH=$dir_a/nginx/sbin:$PATH" > /etc/profile.d/nginx.sh
fi
cat > /usr/lib/systemd/system/nginx.service << EOF
[Unit]
Description=Nginx server daemon
Wants=sshd-keygen.target
[Service]
Type=forking
ExecStart=$dir_a/nginx/sbin/nginx
ExecStop=$dir_a/nginx/sbin/nginx -s stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now nginx
查看端口
[root@server1 ~]# ss -antl
State  Recv-Q   Send-Q     Local Address:Port           Peer Address:Port         
LISTEN   0    128        0.0.0.0:22              0.0.0.0:*          
LISTEN   0    128        0.0.0.0:80              0.0.0.0:*          
LISTEN   0    128           [::]:22                 [::]:*
访问页面
DSC0000.jpg


在server上部署lnmp
部署nginx
[root@server2 lnmp]# cat install.sh 
#!/bin/bash
if [ $UID -ne 0 ];then
    echo "Please use administrator account"
    exit
fi
app_a=nginx-1.20.1.tar.gz
dir_a=/usr/local
dir_b=/var/log
dir_c=nginx-1.20.1
if [ ! -d $dir_b/nginx ];then
    mkdir -p $dir_b/nginx
fi
chown -R nginx.nginx $dir_b/nginx
yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++  make
yum -y groups mark install "Development Tools"
id nginx &>/dev/null 
if [ $? -ne 0 ];then
    useradd -r -M -s /sbin/nologin nginx
fi
tar xf bag/$app_a -C $dir_a
cd  $dir_a/$dir_c
if [ ! -d $dir_a/nginx ];then
    ./configure 
        --prefix=$dir_a/nginx 
        --user=nginx 
        --group=nginx 
        --with-debug 
        --with-http_ssl_module 
        --with-http_realip_module 
        --with-http_image_filter_module 
        --with-http_gunzip_module 
        --with-http_gzip_static_module 
        --with-http_stub_status_module 
        --http-log-path=$dir_b/nginx/access.log 
        --error-log-path=$dir_b/nginx/error.log  && make  && make install
fi
cd ..
if [ ! -f /etc/profile.d/nginx.sh  ];then
    echo "export PATH=$dir_a/nginx/sbin:$PATH" > /etc/profile.d/nginx.sh
fi
cat > /usr/lib/systemd/system/nginx.service << EOF
[Unit]
Description=Nginx server daemon
Wants=sshd-keygen.target
[Service]
Type=forking
ExecStart=$dir_a/nginx/sbin/nginx
ExecStop=$dir_a/nginx/sbin/nginx -s stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now nginx
部署mysql
[root@server2 lnmp]# cat mysql.sh 
#!/bin/bash
if [ $UID -ne 0 ];then
    echo "root?"
    exit
fi
dir_a=/usr/local
dir_b=/opt/data
app_a=mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
app_b=mysql-5.7.34-linux-glibc2.12-x86_64
id mysql  &>/dev/null
if [ $? -ne 0 ];then
    useradd -r -M -s /sbin/nologin mysql
 fi

yum -y install ncurses-compat-libs ncurses-devel openssl-devel openssl cmake mariadb-devel 

if [ ! -d $dir_a/$app_b ];then
    tar xf bag/$app_a -C $dir_a
fi
if [ ! -d $dir_a/mysql ];then
    ln -sv $dir_a/$app_b  $dir_a/mysql
fi
chown -R mysql:mysql $dir_a/mysql*
echo "export PATH=$dir_a/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
if [ ! -d /$dir_b ];then
    mkdir -p /$dir_b 
    chown -R mysql.mysql /$dir_b
fi

content=$(ls $dir_b | wc -l)
if [ $content -eq 0  ];then
    mysqld --initialize-insecure --user mysql --datadir $dir_b
fi
cat > /etc/my.cnf <<EOF
[mysqld]
basedir = $dir_a/mysql  
datadir = $dir_b       
socket = /tmp/mysql.sock    
port = 3306           
pid-file = $dir_b/mysql.pid
user = mysql          
skip-name-resolve
EOF

sed -ri "s#^(basedir=).*#1$dir_a/mysql#g" $dir_a/mysql/support-files/mysql.server
sed -ri "s#^(datadir=).*#1$dir_b#g" $dir_a/mysql/support-files/mysql.server

cat > /usr/lib/systemd/system/mysqld.service <<EOF
[Unit]
Description=mysql server daemon
After=network.target 
[Service]
Type=forking
ExecStart=$dir_a/mysql/support-files/mysql.server start
ExecStop=$dir_a/mysql/support-files/mysql.server stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl  daemon-reload
systemctl  enable --now  mysqld
部署php
https://www.php.net/distributions/php-8.0.10.tar.xz
解压
[root@server2 ~]# tar -xf  php-8.0.10.tar.gz  -C /usr/local/
安装依赖包
[root@server2 ~]# wget http://mirrors.aliyun.com/repo/epel-7.repo
[root@server1 ~]# yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel openldap-devel  pcre-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel mhash mhash-devel  php-mysqlnd  libsqlite3x-devel libzip-devel
[root@server2 ~]# yum -y install http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/oniguruma-devel-6.8.2-2.el8.x86_64.rpm
编译安装
[root@server2 ~]# cd /usr/local/php-8.0.10/
[root@server2 php-8.0.10]# ./configure --prefix=/usr/local/php8  --with-config-file-path=/etc --enable-fpm --disable-debug --disable-rpath --enable-shared --enable-soap --with-openssl --enable-bcmath --with-iconv --with-bz2 --enable-calendar --with-curl --enable-exif  --enable-ftp --enable-gd --with-jpeg --with-zlib-dir --with-freetype --with-gettext --enable-mbstring --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-readline --enable-shmop --enable-simplexml --enable-sockets --with-zip --enable-mysqlnd-compression-support --with-pear --enable-pcntl --enable-posix
......
......
......
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands
+--------------------------------------------------------------------+
| License:                               |
| This software is subject to the PHP License, available in this   |
| distribution in the file LICENSE. By continuing this installation  |
| process, you are bound by the terms of this license agreement.   |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.              |
+--------------------------------------------------------------------+
Thank you for using PHP.

[root@server2 php-8.0.10]# make
.......
.......
.......
invertedregexiterator.inc
pharcommand.inc
phar.inc
Build complete.
Don"t forget to run "make test".
[root@server2 php-8.0.10]# make install
......
......
/root/php-8.0.10/build/shtool install -c ext/phar/phar.phar /usr/local/php8/bin/phar.phar
ln -s -f phar.phar /usr/local/php8/bin/phar
Installing PDO headers:       /usr/local/php8/include/php/ext/pdo/
配置php-fpm
[root@server2 php-8.0.10]# cp /etc/php.ini /opt/
[root@server2 php-8.0.10]# cp php.ini-production /etc/php.ini 
cp: overwrite "/etc/php.ini"? y
[root@server2 php-8.0.10]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@server2 php-8.0.10]# chmod +x /etc/init.d/php-fpm
[root@server2 php-8.0.10]# cd  ..
[root@server2 local]# cd  php8/
[root@server2 php8]# cd  etc/
[root@server2 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server2 etc]# cp php-fpm.d/www.conf.default php-fpm.d/www.conf
[root@server2 etc]# cd  php-fpm.d
[root@server2 php-fpm.d]# ls
www.conf  www.conf.default
配置环境变量
[root@server2 ~]#  echo "export PATH=/usr/local/php8/bin:$PATH" > /etc/profile.d/php.sh
[root@server2 ~]# cat /etc/profile.d/php.sh
export PATH=/usr/local/php8/bin:$PATH
[root@server2 ~]# source /etc/profile.d/php.sh
[root@server2 ~]# which php
/usr/local/php8/bin/php
编写service文件
[root@server2 ~]# cat /usr/lib/systemd/system/php-fpm.service 
[Unit]
Description=php-fpm server daemon
After=network.target 
[Service]
Type=forking
ExecStart=/etc/init.d/php-fpm start
ExecStop=/etc/init.d/php-fpm stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
[root@server2 ]# systemctl  daemon-reload
启动php
[root@server2 ~]# systemctl start php-fpm
[root@server2 ~]# ss -antl
State  Recv-Q   Send-Q     Local Address:Port           Peer Address:Port         
LISTEN   0    128        127.0.0.1:9000              0.0.0.0:*          
LISTEN   0    128        0.0.0.0:80              0.0.0.0:*          
LISTEN   0    128        0.0.0.0:22              0.0.0.0:*          
LISTEN   0    80             *:3306                *:*          
LISTEN   0    128           [::]:22                 [::]:*
在nginx.conf里配置虚拟主机
[root@server2 ~]# cd  /usr/local/nginx/html/
[root@server2 html]# ls
50x.html  index.html
[root@server2 html]# vim index.php
[root@server2 html]# cat index.php 
<?php
  phpinfo();
?>
[root@server2 conf]# pwd
/usr/local/nginx/conf
[root@server2 conf]# vim  nginx.conf
........
http {
  include     mime.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;
......
    location / {
      root   html;
      index  index.php index.html index.htm;
    }
.....

    location ~ .php$ {
      root       html;
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME $Document_root$fastcgi_script_name;
      include    fastcgi_params;
    }
[root@server2 conf]# nginx -s reload
访问
DSC0001.jpg


node3部署httpd
[root@node3 ~]# yum -y install httpd
启动
[root@node3 ~]# systemctl start httpd
[root@node3 ~]# ss -antl
State    Recv-Q Send-Q Local Address:Port         Peer Address:Port        
LISTEN   0    128   *:22          *:*          
LISTEN   0    100  127.0.0.1:25          *:*          
LISTEN   0    128  :::80         :::*          
LISTEN   0    128  :::22         :::*          
LISTEN   0    100     ::1:25         :::*
访问
DSC0002.jpg


实现分离部署
在server1上的nginx.conf上配置
[root@server1 ~]# cat /usr/local/nginx/conf/nginx.conf
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid    logs/nginx.pid;

events {
  worker_connections  1024;
}

http {
  include     mime.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;
  upstream cm {        #静态资源地址
    server 192.168.244.142;
  }
  
  upstream nm {        #动态资源地址
    server 192.168.244.133;
  }

  server {
    listen     80;
    server_name  localhost;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
      proxy_pass http://cm;   #指向静态
    }
    
    #error_page  404        /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   html;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    location ~ .php$ {     #指向动态
      proxy_pass   http://nm;
    }
[root@server1 ~]# nginx -s reload
访问 192.168.244.131
DSC0003.jpg

在访问 192.168.244.131/index.php
DSC0004.jpg

到此这篇关于nginx实现动静分离的方法示例的文章就介绍到这了,更多相关nginx 动静分离内容请搜索CodeAE代码之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持CodeAE代码之家!
原文链接:https://blog.csdn.net/YSTWD_WY/article/details/121067849

关注下面的标签,发现更多相似文章