• 0

  • 371

Ngnix代理前后端服务

黑猫

我不是黑客

4天前

一、Linux基础

1、Linux下各个文件夹含义

  1. /bin与/sbin的区别
  • /bin: 存放所有用户皆可用的系统程序,即普通的基本命令,如:touch ls等。
  • /sbin: 存放超级用户才能使用的系统程序,即基本的系统命令,如:sreboot等。
  1. /usr/bin与/usr/sbin的区别
  • /usr/bin: 存放所有用户都可用的应用程序,一般是已安装软件的运行脚本,如:free、make、wget等。
  • /usr/sbin: 存放超级用户才能使用的应用程序 ,一般是与服务器软件程序命令相关的,如:dhcpd、 httpd、samba等。
  1. /usr/local/bin与/usr/local/sbin的区别
  • /usr/local/bin: 存放所有用户都可用的第三方软件程序,如mysql
  • /usr/local/sbin: 存放超级用户才能使用的第三方软件,如nginx

2、Linux防火墙和服务端口开启

现在防火墙有两种服:

  • service firewalld
  • service iptables

a. 就firewalld来说

sudo service firewalld status // 查询防火墙状态
// 如果防火墙关闭,需要开启防火墙
sudo service firewalld start // 开启防火墙

sudo netstat -anp // 查看所有开放的端口
sudo firewall-cmd --query-port=8808/tcp // 查询对应端口号开启状态( 显示no关闭, yes开启 )
sudo firewall-cmd --add-port=8808/tcp --permanent // 开启对应的端口
sudo firewall-cmd --remove-port=8808/tcp --permanent // 关闭对应的端口
// 最后重启防火墙
sudo firewall-cmd --reload
复制代码

如果是云服务器(阿里云/腾讯云)的话,还得去云服务器管理平台,添加安全组,开启端口号 b. service iptables

  1. 开放端口命令: /sbin/iptables -I INPUT -p tcp --dport 8085 -j ACCEPT
  2. 保存:/etc/rc.d/init.d/iptables save
  3. 重启服务:/etc/init.d/iptables restart
  4. 查看端口是否开放:/sbin/iptables -L -n

3、Linux下操做报错

  1. yum使用报错
  • 报错内容
File contains no section headers.
file: file:///etc/yum.repos.d/nginx.repo, line: 1
'nx-stable]\n'
复制代码
  • 解决方案
rm -f  /etc/yum.repos.d/CentOS-Base.repo // 先删除原有的文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
 // 然后重新
 yum clean all // 清理缓存
 yum list installed // 查询yum安装的包列表,成功
复制代码
  1. yum安装nginx出错
    出现这个的原因是因为本地yum源中没有我们想要的nginx,那么我们就需要创建一个/etc/yum.repos.d/nginx.repo的文件,新增一个yum源。
  • 报错内容
[root@iZ2ze542zl60b3lzwuujc3Z local]# yum install nginx -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.cloud.aliyuncs.com
 * extras: mirrors.cloud.aliyuncs.com
 * updates: mirrors.cloud.aliyuncs.com
No package nginx available.
Error: Nothing to do
复制代码
  • 解决方案
vim /etc/yum.repos.d/nginx.repo
复制代码

在nginx.repo 中加入以下

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
复制代码
  1. Nginx报错:nginx: [error] invalid PID number "" in "/run/nginx.pid"
    执行 nginx -t 是OK的,然而在执行 nginx -s reload 的时候报错
  • 报错内容:nginx: [error] invalid PID number "" in "/run/nginx.pid"
  • 解决方案:
nginx -c /etc/nginx/nginx.conf
nginx.conf文件的路径可以从nginx -t的返回中找到。
nginx -s reload
复制代码

如果以上没用,则直接kill调nginx里面的进程

sudo kill -quit 23544
复制代码

4、创建nginx.repo文件

因为阿里云的epel源是默认下载就是Fedora的,Centos7安装nginx后/etc/nginx/conf.d目录下无default.conf文件。

  • 报错内容(报错不合适,知道就好了)

/etc/nginx/conf.d目录下无default.conf```文件。

  • 解决方案:
  1. 安装yum工具包
yum install yum-utils
复制代码
  1. 创建并编辑nginx.repo文件
vim /etc/yum.repos.d/nginx.repo
复制代码

编辑内容如下:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
复制代码

二、Nginx使用

1、Nginx安装

sudo yum install nginx -y // 安装nginx
sudo systemctl start nginx // 启动nginx
sudo netstat -lntp // 查询端口启动列表
复制代码

2、通过配置脚本文件启动Nginx

  • 编辑Nginx配置文件
sudo vim /etc/init.d/nginx
复制代码

将以下脚本写入Nginx文件

#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /etc/nginx/nginx.conf
nginxd=/usr/sbin/nginx
nginx_config=/etc/nginx/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
   echo "nginx already running...."
   exit 1
fi
   echo -n $"Starting $prog: "
   daemon $nginxd -c ${nginx_config}
   RETVAL=$?
   echo
   [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
   return $RETVAL
}
# Stop nginx daemons functions.
stop() {
        echo -n $"Stopping $prog: "
        killproc $nginxd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
    echo -n $"Reloading $prog: "
    #kill -HUP `cat ${nginx_pid}`
    killproc $nginxd -HUP
    RETVAL=$?
    echo
}
# See how we were called.
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
reload)
        reload
        ;;
restart)
        stop
        start
        ;;
status)
        status $prog
        RETVAL=$?
        ;;
*)
        echo $"Usage: $prog {start|stop|restart|reload|status|help}"
        exit 1
esac
exit $RETVAL
复制代码
  • 继续
// 配置nginx执行命令
sudo chmod a+x /etc/init.d/nginx

// 用脚本管理nginx服务
sudo /etc/init.d/nginx start
sudo /etc/init.d/nginx stop

// 将nginx服务加入chkconfig管理列表
sudo chkconfig --add /etc/init.d/nginx

// 使用service对nginx进行启动
sudo service nginx start
sudo service nginx stop

// 设置终端模式开机启动
sudo chkconfig nginx on
复制代码

三、Nginx配置前后端(单独配置前后端对应的nginx配置文件,不推荐

1、通过nginx正向代理,配置前端服务

  • 先创建一个前端项目的文件夹react
cd /usr 
mkdir react
复制代码
  • 配置react项目的nginx配置文件
cd /etc/nginx/conf.d
cp default.conf react.conf
vim react.conf
复制代码

  • 重启nginx
nginx -s reload
复制代码

前端访问成功

2、通过nginx反向代理配置后端服务

  • 先创建一个后端项目的文件夹koa
cd /usr 
mkdir koa
复制代码
  • 参考博主的另一篇文件,通过koa-generator脚手架部署koa2项目。并添加解决访问标识:/api 通过PM2管理node项目,启动koa项目
  • 配置koa项目的nginx配置文件
cd /etc/nginx/conf.d
cp default.conf koa.conf
vim koa.conf
复制代码

通过反向代理,监听koa项目

  • 重启nginx
nginx -s reload
复制代码
  • 接口调用成功

3、因为单独给前端(react.conf)和后端(koa.conf)分别配置了对应的nginx配置文件。如何将单独的前后端配置文件,代理到一起,待调研测试~~

下边给你另一种实现方式

四、Nginx使用(前端后端配置放到一个nginx配置文件中,推荐

server {
    # 需要被监听的端口号,前提是此端口号没有被占用,否则在重启 Nginx 时会报错
    listen       8888;
    # 服务名称,无所谓
    server_name  localhost;

    # 上述端口指向的根目录
    root /opt/asing1elife/teamnote;
    # 项目根目录中指向项目首页
    index index.html;

    client_max_body_size 20m; 
    client_body_buffer_size 128k;

    # 根请求会指向的页面
    location / {
      # 此处的 @router 实际上是引用下面的转发,否则在 Vue 路由刷新时可能会抛出 404
      try_files $uri $uri/ @router;
      # 请求指向的首页
      index index.html;
    }

    # 由于路由的资源不一定是真实的路径,无法找到具体文件
    # 所以需要将请求重写到 index.html 中,然后交给真正的 Vue 路由处理请求资源
    location @router {
      rewrite ^.*$ /index.html last;
    }

    # 关键步骤,这里表示将所有的 http://192.168.7.8:8888/teamnote/api/ 开头的请求都转发到下面 proxy_pass 指定的链接中
    # 这里使用 /teamnote/api/ 而不是 /teamnote/ ,是因为前端项目本身的访问链接就是 http:192.168.7.8:8888/teamnote/
    # 为了防止在访问页面时请求就被 Nginx 代理转发,这里需要更具体的配置,才能和前端访问请求区分开
    location /teamnote/api/ {
          # 后端的真实接口
          proxy_pass http://192.168.7.8:2592/teamnote/api/;
          proxy_redirect off;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header   Cookie $http_cookie;
          # for Ajax
          #fastcgi_param HTTP_X_REQUESTED_WITH $http_x_requested_with;
          proxy_set_header HTTP-X-REQUESTED-WITH $http_x_requested_with;
          proxy_set_header HTTP_X_REQUESTED_WITH $http_x_requested_with;
          proxy_set_header x-requested-with $http_x_requested_with;
          client_max_body_size 10m;
          client_body_buffer_size 128k;
          proxy_connect_timeout 90;
          proxy_send_timeout 90;
          proxy_read_timeout 90;
          proxy_buffer_size 128k;
          proxy_buffers 32 32k;
          proxy_busy_buffers_size 128k;
          proxy_temp_file_write_size 128k;
    }
}
复制代码
免责声明:文章版权归原作者所有,其内容与观点不代表Unitimes立场,亦不构成任何投资意见或建议。

信息安全

371

相关文章推荐

未登录头像

暂无评论