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


Posted in Servers onNovember 07, 2021

本文主要介绍了nginx实现动静分离的方法示例,具有一定的学习价值,具体如下

环境:

 

系统/主机名 IP地址 服务
Redhat8 :server1 192.168.244.131 nginx
Redhat8:server2 192.168.244.133 lnmp
Content7:node3 192.168.244.142 httpd

在三台主机上关闭防火墙

[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                               [::]:*

访问页面

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

在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

访问

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

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                 :::*

访问

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

实现分离部署

在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

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

在访问 192.168.244.131/index.php

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

到此这篇关于nginx实现动静分离的方法示例的文章就介绍到这了,更多相关nginx 动静分离内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
nginx实现发布静态资源的方法
Mar 31 Servers
nginx 反向代理之 proxy_pass的实现
Mar 31 Servers
apache基于端口创建虚拟主机的示例
Apr 24 Servers
Apache Hudi数据布局黑科技降低一半查询时间
Mar 31 Servers
CentOS下安装Jenkins的完整步骤
Apr 07 Servers
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
Apr 29 Servers
Nginx配置之禁止指定IP访问
May 02 Servers
win sever 2022如何占用操作主机角色
Jun 25 Servers
centos环境下nginx高可用集群的搭建指南
Jul 23 Servers
Tomcat安装使用及部署Web项目的3种方法汇总
Aug 14 Servers
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
Aug 14 Servers
Flink 侧流输出源码示例解析
Sep 23 Servers
Nginx内网单机反向代理的实现
Nov 07 #Servers
zabbix自定义监控nginx状态实现过程
总结高并发下Nginx性能如何优化
Rhit高效可视化Nginx日志查看工具
Nginx+Tomcat负载均衡集群的实现示例
Nginx反向代理学习实例教程
使用Nginx搭载rtmp直播服务器的方法
Oct 16 #Servers
You might like
关于crontab的使用详解
2013/06/24 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
JSON Web Tokens的实现原理
2017/04/02 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
出国留学介绍信
2014/01/13 职场文书
初中校园广播稿
2014/02/02 职场文书
绿色环保演讲稿
2014/05/10 职场文书
安全宣传标语
2014/06/10 职场文书
降价通知函
2015/04/23 职场文书
小学运动会宣传稿
2015/07/23 职场文书
教师反邪教心得体会
2016/01/15 职场文书
四年级数学教学反思
2016/02/16 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
nginx刷新页面出现404解决方案(亲测有效)
2022/03/18 Servers