linux在非root权限无外网(只有内网的生产环境)情况下安装nginx+mysql+php

Posted fudanchencds

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux在非root权限无外网(只有内网的生产环境)情况下安装nginx+mysql+php相关的知识,希望对你有一定的参考价值。

  虽然说是非root权限,但是编译php所需要的依赖包还是需要root权限的。

  安装之前先保证linux有gcc和g++,因为很多东西都需要这两个库,如果没有,运行以下命令

  yum install -y gcc gcc-c++

  一般linux里面都会有,如果已经存在,它会报已经存在无法安装

一、安装nginx

  1. 安装nginx前,我们需要安装3个依赖包zlib、pcre、openssl(此需要root权限)

  yum install -y zlib pcre openssl

  2. 如果上面没有无法yum,那就外部下载zlib、pcre、openssl的依赖包再安装,如果yum成功,请跳过此步

    2.1 安装 pcre(make的时候此需要root权限)

      下载pcre依赖包 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre

      上传到目录里      //这边目录为/home/nginx/(是nginx用户)

      cd /home/nginx/

      tar -zxvf pcre-8.36.tar.gz    

      cd pcre-8.36

      ./configure
      make
      make install  

    2.2 安装openssl(make的时候此需要root权限)

      下载openssl依赖包 http://distfiles.macports.org/openssl/
      上传到目录里       //这边目录为/home/nginx/(是nginx用户)

      cd /home/nginx/
      tar -zxvf openssl-1.0.1e.tar.gz
      cd openssl-1.0.1e
      ./config
      make
      make install

    2.3 安装zlib(make的时候此需要root权限)

      下载zlib依赖包 http://www.zlib.net/fossils/
      上传到目录里       //这边目录为/home/nginx/(是nginx用户)

      cd /home/nginx/
      tar -zxvf zlib-1.2.3.tar.gz
      cd zlib-1.2.3
      CFLAGS="-O3 -fPIC" ./configure
      make
      make install

  3. 安装nginx

  下载nginx http://nginx.org/en/download.html
  上传到目录里       //这边目录为/home/nginx/(是nginx用户)

  tar -zxvf nginx-1.8.0.tar.gz
  cd nginx-1.8.0
  ./configure --prefix=/home/nginx/nginx-server      //--prefix=要安装的目录
  make
  make install

  

  

  //如果是有进行第2步的操作,安装nginx的时候,配置时使用下面的命令,其余命令一样
  ./configure --prefix=/home/nginx/nginx-server --with-pcre=/home/nginx/pcre-8.36 --with-zlib=/home/nginx/zlib-1.2.3 --with-openssl=/home/nginx/openssl-1.0.1e

  //--with-pcre=pcre安装的路径地址  --with-zlib=zlib安装的路径地址  --with-openssl=openssl安装的路径地址

  

  4. 检测nginx是否成功
  cd /home/nginx/nginx-server/sbin
  ./nginx -v 查看版本,检测是否安装成功

 

二 安装mysql

  1. 安装mysql前先安装cmake小工具,使用cmake来编译(此需要root权限)

  yum install -y cmake

  2.  如果上面没有无法yum,那就外部下载cmake再安装,如果yum成功,请跳过此步(make的时候此需要root权限)

  下载cmake https://cmake.org/files/

  上传到目录里       //这边目录为/home/mysql/(是mysql用户)

  cd /home/mysql/

  tar -xvzf cmake-3.6.1.tar.gz

  cd cmake-3.6.1

  ./bootstrap

  gmake

  make install

  3. 安装mysql

  下载mysql http://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.6/

  上传到目录里 //这边目录为/home/mysql/(是mysql用户)
  tar -zxvf mysql-5.6.43.tar.gz
  cd mysql-5.6.43
  cmake -DCMAKE_INSTALL_PREFIX=/home/mysql/mysql-server   //-DCMAKE_INSTALL_PREFIX=要安装的目录 
  make
  make install

  4. 配置 mysql

  cd /home/mysql/mysql-server
  rm -f /etc/my.cnf      // 删除系统自带的mysql配置文件
  ./scripts/mysql_install_db

  将 ./support-files/mysql.server 复制到 /etc/init.d/ 下
  cp support-files/mysql.server /etc/init.d/mysqld

  修改 linux 的环境变量
  vim /etc/profile          //vim不行的可以使用vi命令

  将指针移动到最后一行,然后输入i就可以在最后一行编辑操作了,然后在/etc/profile文件的最后加入一句
  export PATH="/home/mysql/mysql-server/bin:$PATH"
  然后摁住“Esc”退出当前编辑操作,再摁住“Shift”+“:” 并输入“wq” 保存并退出

  source /etc/profile        // 这一句是让配置立即生效
  service mysqld start        // 启动 mysql

  下面就可以操作数据库了

  5. 修改数据库密码 

  mysql -u root -p
                //密码为空,所以在输入密码的地方直接敲回车即可
  use mysql;       //选择数据库
  UPDATE user SET password=PASSWORD(‘newpasswd‘) WHERE user=‘root‘;   //修改密码,其中newpasswd即为你所要设的密码
  flush privileges;     //刷新,设置完需要刷新才能生效
  exit;            //退出

 

三、 安装php

  1. yum安装编译php过程所需要的编译工具和小程序(安装这些编译工具和小程序需要root权限)

  yum install -y autoconf libtool-ltdl-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssl-devel curl-devel ncurses-devel libcap-devel sendmail pcre-devel libxslt-devel bzip2-devel diffutils unzip ntp bzip2 patch curl libjpeg libpng freetype libxslt libxml2 libxml2-devel

  //建议一个一个安装,防止出错

  2. 如果第一步中无法安装libxml2,请外部下载libxml2的依赖包并安装,如果已经安装libxml2,请跳过此步 

  安装libxml2(安装libxml2必须要root权限)

  下载libxml2 http://xmlsoft.org/sources/
  上传到目录里       //这边目录为/home/php/(是php用户,此用户不一定是php用户,可以是其他用户,其他用户即为其对应用户名为目录,因为linux创建用户的时候都会在/home目录产生对应的文件目录,而我们使用的用户即为在对应目录下面进行操作,根据公司所设置的用户来操作)

  cd /home/php/
  tar -zxvf libxml2-2.9.1.tar.gz
  cd libxml2-2.9.1
  ./configure--with-python=no
  make
  make install

  3. 安装 php 

  下载php https://museum.php.net/php5/

  上传到目录里 //这边目录为/home/php/(是php用户)

  tar -zxvf php-5.3.27.tar.gz
  cd php-5.3.27
  ./configure --prefix=/home/php/php5 --with-config-file-path=/home/php/php5/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-fpm --enable-sockets --enable-zip --enable-calendar --enable-bcmath --enable-soap --with-zlib --with-iconv --with-gd --with-xmlrpc --enable-mbstring --with-curl --enable-ftp --with-mcrypt --without-pear --with-freetype-dir --with-jpeg-dir --with-png-dir --disable-ipv6 --disable-debug --with-openssl          //--prefix=要安装的目录
  make
  make test      //test完之后,输入n
  make install

  

  //中途可能会出现libmcrypt的问题错误,如果出现,下载安装libmcrypt,安装过程如下:(安装libmcrypt必须要root权限) 

  下载libmcrypt http://soft.7dot.com/

  上传到目录里 //这边目录为/home/php/(是php用户)

  cd /home/php/
  tar -zxvf libmcrypt-2.5.8.tar.gz
  cd libmcrypt-2.5.8
  ./configure --prefix=/usr/local    //--prefix=要安装的目录
  make
  make install

 

到此为止,php就安装好了,接下来就是配置php和nginx 

  

四、 php和nginx配置

  1. php配置

  cp php.ini-development /home/php/php5/etc/php.ini
  cp /home/php/php5/etc/php-fpm.conf.default /home/php/php5/etc/php-fpm.conf

  

  vim /home/php/php5/etc/php.ini    //vim不行的可以使用vi命令

  打开php配置文件找到cgi.fix_pathinfo配置项,这一项默认被注释并且值为1,根据官方文档的说明,这里为了当文件不存在时,阻止Nginx将请求发送到后端的PHP-FPM模块,从而避免恶意脚本注入的攻击,所以此项应该去掉注释并设置为0。

  设置完毕保存并退出

  //vim或vi配置文件之后,输入“/cgi.fix_pathinfo/”即可找到,如果没找到,可以连续输入几次,然后在找到的那个地方,输入“i”指针即可进入当前行数进行编辑模式。修改完之后摁住“Esc”退出编辑模式,然后摁住“Shift”+“:” 并输入“wq” 保存并退出。

  注意一个地方就是php.ini配置文件的位置可以在编译前配置参数中设置,编译参数可以写成:--with-config-file-path=/home/php/php5/etc 这样的话php就回去指定的目录下读取php.ini配置文件,如果不加这个参数默认位置就是php安装目录下的lib目录,具体也可以在phpinfo()输出界面查看,如果php.ini放到其他位置,php读取不到,那么所有的配置修改后都是不生效的,这点要注意  

 

  vim /home/cib/php/etc/php-fpm.conf
  修改php-fpm.conf 的user和group为对应打开网站的用户和组(如果打开网站的用户和组是www,那就将nobody改成www,此处改为nginx)
  user = nginx
  group = nginx

 

  启动 php-fpm(必须root权限)
  /home/php/php5/sbin/php-fpm

  如果出现ERROR: unable to bind listening socket for address ‘127.0.0.1:9000‘: Address already in use 错误
  killall php-fpm
  再重新启动启动 php-fpm
  /home/php/php5/sbin/php-fpm

  2. nginx 配置

  cd nginx-server/conf/  (是nginx用户,启动nginx必须为nginx用户)

  vim nginx.conf

  将nginx.conf 中的http 的末尾添加上

  include /home/nginx/nginx-server/conf.d/*.conf;    //必须先创建一个conf.d目录,*.conf为各个站点的nginx的配置文件

  保存并退出

  然后将conf.d目录下的各个.conf文件进行配置(此处用test.conf来替代)

  cd ..      //退出当前目录到前一个目录

  cd conf.d          //进入此目录下的conf.d目录

  cp /home/nginx/nginx-server/conf/nginx.conf /home/nginx/nginx-server/conf.d/test.conf    //复制nginx.conf文件到指定目录并改名为test.conf

  vim test.conf      //将test.conf目录里面全部删除并写入以下内容(vim不行的用vi命令,怎么编辑保存退出等参考前面配置php.ini和配置环境变量)

  server
    listen 80;              //为对应的连接外网的端口号
    server_name localhost;         //为对应的域名,如果没有内网连接可以使用对应IP ,然后端口号80改为其他端口
    root html/test;            //网站安装的相对路径,因为这是直接安装在nginx底下的html目录下面,也可以直接路径,网站文件为test(测试命名,具体网站文件最好命名跟项目相关的)
    index index.html index.htm index.php;     //网站默认打开页面

    location ~ \\.php$            //支持php的模块
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;     //$document_root 为前面root设置的路径
      include fastcgi_params;
    
  

  //此处需要注意的是非root权限无法使用1024以下的端口号

 

五、 测试

  1. 启动nginx(最好是用nginx用户)

  进入nginx启动地址

  cd /home/nginx/nginx-server/sbin/      //nginx用户,直接cd nginx-server/sbin/

  ./nginx      //启动nginx

  启动之前建议先./nginx -t查看下nginx配置文件是否正确

  ./nginx -s reload      //重启nginx。如果之前已经启动了nginx,就不宜使用./nginx命令启动,而应该用此处的命令,不然会出现端口报错

  2. 测验

  写一个index.php文件放在test网站目录下 

  index.php文件写入如下内容:
  <?php
    phpinfo();
  ?>

  然后通过域名打开,如果能够打开phpinfo的信息,即php配置信息,那就代表php安装配置成功。

  //由于这边还未有域名绑定,所以只能使用“IP:端口”的方式打开。

至此全部结束。

 

其余的一些小东西

  1. 使用端口号的使用,可能遇到防火墙阻止,即测试网站打不开,此时参考https://www.cnblogs.com/chenlizhi/p/6668656.html,进行设置端口号。

  2. 端口被占用问题,参考https://www.jianshu.com/p/8f6a42fb0654,或者参考https://blog.csdn.net/qq_27252133/article/details/53646986的第二个方法,进行杀进程处理

  3. mysql无法被外部IP连接,导致后期搭建php网站无法连接数据库,此时参考https://www.cnblogs.com/xiaochongzi/p/6627418.html,进行设置外网可以连接。

 

  安装步骤仅供参考,linux环境不一样,安装的情况可能也不一样,几个依赖包和库(就是必须使用root权限的)可以让拥有root权限的人员去帮忙安装,依赖包的路径可以自己定义,只要能够对应上相应的依赖包即可。一般生产环境是不使用root权限的,因为权限太高。

 

参考的文章:https://blog.csdn.net/nouswait/article/details/83105378   主要参考来源

      https://www.cnblogs.com/freeweb/p/5425554.html     次要参考来源

      https://blog.csdn.net/hometing218/article/details/79516686  安装cmake

      https://www.cnblogs.com/nucdy/p/5784809.html    修改数据库密码

      https://www.cnblogs.com/Erick-L/p/7066564.html     nginx多站点配置

      https://www.cnblogs.com/ghjbk/p/6728100.html    php-fpm 出错问题

      https://www.cnblogs.com/bjphp/p/8468330.html    vim的操作命令

      https://zhidao.baidu.com/question/584316536.html     vi的保存退出

以上是关于linux在非root权限无外网(只有内网的生产环境)情况下安装nginx+mysql+php的主要内容,如果未能解决你的问题,请参考以下文章

完全控制映射到外网的内网web服务器

能让外网访问到内网的方法

外网如何获取内网的IP?

关于 Linux中内网安装软件的一些笔记

linux 配置的双网卡。现在外网的所有端口都不通(Telnet和web 访问)。内网的正常。

怎么判断自己ip是内网还是外网