新服务器从零开始搭建 php + nginx 环境

最近新买了一台阿里云 linux 服务器,之前那台也都是跟着教程走,后续出了问题也是小修小补,还没有真正的自己配置过服务器环境,这里将具体的步骤写出,方便下新手站长~

服务器信息

  • 供应商:阿里云
  • 系统:Ubuntu 14.04
  • 核心数:单核
  • 内存:1GB
  • 带宽:峰值 100Mbps

安装的环境

连接服务器

新买到服务器的话会拿到一个形如 xxx.xxx.xxx.xxx 的公网 ip,进入 linux/osx 的终端或使用 windows 下的终端模拟器输入:

Code   ViewPrint
  1. ssh root@xxx.xxx.xxx.xxx

就可以输入密码了,输入密码后就可以成功连接服务器了。

基本更新

  1. apt-get update
  2. apt-get upgrade -y

执行以上两行代码。

编译 php

安装 libxml 依赖

  1. apt-get install libxml2-dev

如未安装,configure 时则会提示:

configure: error: xml2-config not found. Please check your libxml2 installation.

安装 OpenSSL 依赖

  1. sudo apt-get install libcurl3-openssl-dev

如未安装,configure 时则会提示:

configure: error: Cannot find OpenSSL's

安装 libjpeg 依赖

  1. apt-get install libjpeg-dev

如未安装,configure 时则会提示:

configure: error: jpeglib.h not found.

安装 libpng 依赖

  1. apt-get install libpng12-dev

如未安装,configure 时则会提示:

configure: error: png.h not found.

安装 freetype 依赖

Code   ViewPrint
  1. cd /usr/local/src/ #源码路径,可改
  2. wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.10.tar.gz #此为最新版
  3. tar zxvf freetype-2.4.10.tar.gz
  4. cd freetype-2.4.10/builds/unix/
  5. ./configure
  6. cd ../../
  7. make
  8. sudo make install

如未安装,configure 时则会提示:

configure: error: freetype-config not found.

安装 mcrypt 依赖

  1. apt-get install libmcrypt-dev

如未安装,configure 时则会提示:

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

安装 libiconv 依赖

  1. apt-get install libiconv-hook-dev
  2. ln /usr/lib/libiconv-hook.so /usr/lib/libiconv.so

如未安装,make 时则会提示:

/usr/bin/ld: cannot find -liconv

编译 php 7.0.4

注:以下内容转载自张戈博客

下载及解包源码:

Code   ViewPrint
  1. cd /usr/local/src/ #进入源码目录
  2. wget http://cn2.php.net/distributions/php-7.0.4.tar.gz #从 php 官网下载 php7.0.4 的 tar 包
  3. tar -xf php-7.0.4.tar.gz #打开包

configure:

Code   ViewPrint
  1. cd php-7.0.4
  2. #编译安装
  3. #张戈博客提供的参数大致是这样,缺少的话再添加吧
  4. CFLAGS= CXXFLAGS= ./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc \
  5. --with-fpm-user=www --with-fpm-group=www --enable-fpm --enable-opcache \
  6. --disable-fileinfo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-jpeg-dir \
  7. --with-iconv-dir=/usr/local --with-freetype-dir  --with-png-dir --with-zlib --disable-rpath \
  8. --with-libxml-dir=/usr --enable-xml  --enable-bcmath --enable-shmop --enable-exif --with-curl \
  9. --enable-sysvsem --enable-inline-optimization  --enable-mbregex --enable-inline-optimization \
  10. --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl \
  11. --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-ftp \
  12. --with-gettext --enable-zip --enable-soap --disable-ipv6 --disable-debug
  13. #继续make
  14. make ZEND_EXTRA_LIBS='-liconv'
  15. #最后make install完成安装
  16. make install

设置参数:

Code   ViewPrint
  1. #以下操作均在php-7.0.4这个安装目录下执行
  2. php_install_dir=/usr/local/php7
  3. cp php.ini-production $php_install_dir/etc/php.ini
  4. Mem=`free -m | awk '/Mem:/{print $2}'`
  5. if [ $Mem -gt 1024 -a $Mem -le 1500 ];then
  6.     Memory_limit=192
  7. elif [ $Mem -gt 1500 -a $Mem -le 3500 ];then
  8.     Memory_limit=256
  9. elif [ $Mem -gt 3500 -a $Mem -le 4500 ];then
  10.     Memory_limit=320
  11. elif [ $Mem -gt 4500 ];then
  12.     Memory_limit=448
  13. else
  14.     Memory_limit=128
  15. fi
  16. sed -i "s@^memory_limit.*@memory_limit = ${Memory_limit}M@" $php_install_dir/etc/php.ini
  17. sed -i 's@^output_buffering =@output_buffering = On\noutput_buffering =@' $php_install_dir/etc/php.ini
  18. sed -i 's@^;cgi.fix_pathinfo.*@cgi.fix_pathinfo=0@' $php_install_dir/etc/php.ini
  19. sed -i 's@^short_open_tag = Off@short_open_tag = On@' $php_install_dir/etc/php.ini
  20. sed -i 's@^expose_php = On@expose_php = Off@' $php_install_dir/etc/php.ini
  21. sed -i 's@^request_order.*@request_order = "CGP"@' $php_install_dir/etc/php.ini
  22. sed -i 's@^;date.timezone.*@date.timezone = Asia/Shanghai@' $php_install_dir/etc/php.ini
  23. sed -i 's@^post_max_size.*@post_max_size = 50M@' $php_install_dir/etc/php.ini
  24. sed -i 's@^upload_max_filesize.*@upload_max_filesize = 50M@' $php_install_dir/etc/php.ini
  25. sed -i 's@^;upload_tmp_dir.*@upload_tmp_dir = /tmp@' $php_install_dir/etc/php.ini
  26. sed -i 's@^max_execution_time.*@max_execution_time = 600@' $php_install_dir/etc/php.ini
  27. sed -i 's@^;realpath_cache_size.*@realpath_cache_size = 2M@' $php_install_dir/etc/php.ini
  28. sed -i 's@^disable_functions.*@disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen@' $php_install_dir/etc/php.ini
  29. sed -i 's@^session.cookie_httponly.*@session.cookie_httponly = 1@' $php_install_dir/etc/php.ini
  30. sed -i 's@^mysqlnd.collect_memory_statistics.*@mysqlnd.collect_memory_statistics = On@' $php_install_dir/etc/php.ini
  31. [ -e /usr/sbin/sendmail ] && sed -i 's@^;sendmail_path.*@sendmail_path = /usr/sbin/sendmail -t -i@' $php_install_dir/etc/php.ini
  32. sed -i 's@^\[opcache\]@[opcache]\nzend_extension=opcache.so@' $php_install_dir/etc/php.ini
  33. sed -i 's@^;opcache.enable=.*@opcache.enable=1@' $php_install_dir/etc/php.ini
  34. sed -i "s@^;opcache.memory_consumption.*@opcache.memory_consumption=$Memory_limit@" $php_install_dir/etc/php.ini
  35. sed -i 's@^;opcache.interned_strings_buffer.*@opcache.interned_strings_buffer=8@' $php_install_dir/etc/php.ini
  36. sed -i 's@^;opcache.max_accelerated_files.*@opcache.max_accelerated_files=4000@' $php_install_dir/etc/php.ini
  37. sed -i 's@^;opcache.revalidate_freq.*@opcache.revalidate_freq=60@' $php_install_dir/etc/php.ini
  38. sed -i 's@^;opcache.save_comments.*@opcache.save_comments=0@' $php_install_dir/etc/php.ini
  39. sed -i 's@^;opcache.fast_shutdown.*@opcache.fast_shutdown=1@' $php_install_dir/etc/php.ini
  40. sed -i 's@^;opcache.validate_timestamps.*@opcache.validate_timestamps=1@' $php_install_dir/etc/php.ini
  41. sed -i 's@^;opcache.enable_cli.*@opcache.enable_cli=1@' $php_install_dir/etc/php.ini
  42. sed -i 's@^;opcache.use_cwd.*@opcache.use_cwd=1@' $php_install_dir/etc/php.ini
  43. sed -i 's@^opcache.max_accelerated_files.*@opcache.max_accelerated_files=100000@' $php_install_dir/etc/php.ini
  44. sed -i 's@^;opcache.max_wasted_percentage.*@opcache.max_wasted_percentage=5@' $php_install_dir/etc/php.ini
  45. sed -i 's@^;opcache.consistency_checks.*@opcache.consistency_checks=0@' $php_install_dir/etc/php.ini
  46. sed -i 's@^;opcache.optimization_level.*@;opcache.optimization_level=0@' $php_install_dir/etc/php.ini

配置 php-fpm 及设置 socket 连接:

Code   ViewPrint
  1. cd /usr/local/php7/etc #进入 php etc 目录
  2. cp php-fpm.conf.default php-fpm.conf #拷贝默认配置文件
  3. cd php-fpm.d #进入 www 配置文件目录
  4. cp www.conf.default www.conf #拷贝默认配置文件
  5. vim www.conf #编辑配置文件

在源码中找到这两行:

  1. user = www
  2. group = www

将其修改为:

  1. user = www-data
  2. group = www-data

如果www-data用户不存在,那么先添加www-data用户:

  1. groupadd www-data
  2. useradd -g www-data www-data

然后在源码中找到这一行:

Code   ViewPrint
  1. listen = 127.0.0.1:9000

将其修改为:

  1. listen = /dev/shm/php7-cgi.sock

这样就成功配置了 socket 连接。

设置系统命令链接

  1. ln -s /usr/local/php7/bin/php /usr/bin/php7
  2. ln -s /usr/local/php7/sbin/php-fpm /usr/bin/php7-fpm

查看是否安装成功

完成了系统命令绑定后,在命令行输入:

  1. php7 -v

如果显示为:

Code   ViewPrint
  1. PHP 7.0.4 (cli) (built: Mar 16 2016 16:39:52) ( NTS )
  2. Copyright (c) 1997-2016 The PHP Group
  3. Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
  4.     with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

则为安装成功!

启动 php7-fpm

自 php5.7.4 之后自带的 php-fpm 不再支持原先的 (start|stop|restart) 启动,改为信号控制:
php-fpm 启动:

  1. /usr/local/php7/bin/php

php-fpm 关闭:

  1. kill -INT `cat /usr/local/php7/var/run/php-fpm.pid`

php-fpm 重启:

  1. kill -USR2 `cat /usr/local/php7/var/run/php-fpm.pid`

查看 php-fpm 进程数:

  1. ps aux | grep -c php-fpm

编译 nginx

安装 pcre 依赖

Code   ViewPrint
  1. cd /usr/local/src/
  2. wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
  3. tar -xf pcre-8.37.tar.gz
  4. cd pcre-8.37/
  5. ./configure
  6. make
  7. make install

安装 zlib 依赖

Code   ViewPrint
  1. cd /usr/local/src/
  2. wget http://zlib.net/zlib-1.2.8.tar.gz
  3. tar -xf zlib-1.2.8.tar.gz
  4. cd zlib-1.2.8/
  5. ./configure
  6. make
  7. make install

安装 OpenSSL 依赖

Code   ViewPrint
  1. cd /usr/local/src/
  2. wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
  3. tar -xf openssl-1.0.1c.tar.gz

编译 nginx1.9.12

Code   ViewPrint
  1. cd /usr/local/src/
  2. wget http://nginx.org/download/nginx-1.9.12.tar.gz
  3. tar -xf nginx-1.9.12.tar.gz
  4. cd nginx-1.9.12.tar.gz
  5. # 下面这些是我的配置,具体需要什么不需要什么自行添加~
  6. ./configure --prefix=/etc/nginx --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_mp4_module --with-http_perl_module --with-http_random_index_module --with-http_secure_link_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module --with-http_v2_module --with-pcre=/usr/local/src/pcre-8.37 --with-zlib=/usr/local/src/zlib-1.2.8 --with-openssl=/usr/local/src/openssl-1.0.1c

一个小代码进行测试

  1. mkdir -p /var/www/test/
  2. cd /var/www/test/
  3. vim index.php

在 index.php 中输入:

  1. <?php
  2.     phpinfo();
  3. ?>

保存后进行赋权:

Code   ViewPrint
  1. chown -R www-data /var/www/test/

然后书写 nginx 配置

  1. cd /etc/nginx/sites-available/
  2. vim test.conf

在文件中输入:

Code   ViewPrint
  1. server {
  2.         listen 80;
  3.         server_name localhost;
  4.         root /var/www/test/;
  5.         index index.php;
  6.         location ~ \.php$ {
  7.                 fastcgi_split_path_info ^(.+\.php)(/.+)$;
  8.                 fastcgi_pass unix:/dev/shm/php7-cgi.sock;
  9.                 fastcgi_index index.php;
  10.                 include fastcgi_params;
  11.                 fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
  12.         }
  13. }

建立 nginx 软连接并重启

  1. ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled/
  2. service nginx restart

在命令行中输入:

Code   ViewPrint
  1. curl http://localhost/

如果出现了 php 的信息就说明成功安装~

 

至此,nginx1.9.12 + php7.0.4 的环境已经完全搭建完成~因为我的数据库使用了 RDS,便没有安装 MySQL,需要的话类似的编译即可。

如果我的文章对您有帮助,请我喝杯咖啡吧~

支付宝转账打赏⬆️

微信钱包转账打赏⬆️

目前评论:23   其中:访客  17   博主  6

  1. ルイヴィトン 財布N級品 0

    スーパーコピーブランド専門ネットショップで、
    ファッション時計,バッグ,財布とその他の世界一流ブランドスーパーコピー激安販売。
    弊店のスーパー コピーブランド時計は日本全国送料手数料無料です。
    ブランドコピー品の華麗さや実用でお客様に驚喜を与えます。

  2. スーパーコピー財布 0

    コピー業界取扱ブランド腕時計最大級激安通販!
    ルイヴィトンバッグ、エルメスコピー、腕時計スーパーコピー 時計スーパーコピー 腕時計コピー コピー時計 通販は腕時計スーパーコピーN品専売店です。
    最高品質のスーパーコピー腕時計を取扱っています。
    スーパーコピーバッグ、など全て新品商品になります。
    ★迅速、確実にお客様の手元にお届け致します。
    ★実物写真、付属品を完備しております。
    ★低価格を提供すると共に、品質を絶対保証しております。
    ★商品の交換と返品ができます。
    ブランドコピーバッグの誠実と信用の店、
    24時間以内に出荷し、3~4日に到着して、

  3. スーパーコピー財布 0

    コピーモンクレール専門店
    当サイトはモンクレール全品(新品/スーパーコピー品)を
    販売しているの専業通販店舗です。
    主にモンクレールダウン、モンクレール ダウンジャケット、
    ダウンコート、ダウンベスト、モンクレールメンズ、
    モンクレールレディースを取り扱っています。
    スーパーコピー財布 http://www.kopii.net/products/p3/1/index_6.html

  4. ブランド激安市場N級品買取 0

    1-1品財布、腕時計、小物販売。

    弊社は安価 販売
    ◆ 当社の商品は絶対の自信が御座います。
    ◆必ずご満足頂ける品質の商品のみ販売しております.
    ◆絶対に満足して頂ける品のみ皆様にお届け致します.
    ◆人気の売れ筋商品を多数取り揃えております。
    ◆全て激安特価でご提供.お願いします。
    ◆ 送料無料(日本全国)
    経営方針: 品質を重視、納期も厳守、信用第一!

    当社URL:
    ブランド激安市場N級品買取 http://www.sbagshop.com/brand-20-copy-0.html

  5. ブランド偽物 0

    すぐに発送していただき、注文の翌日には届きました。迅速な対応は素晴らしいです。
    【送料無料】シャネル ハンドバッグをセール価格で販売中♪シャネル ハンドバッグ ベージュ ブラック キャンバス カーフ 新品 ココマーク CHANEL
    お安く買えてとても嬉しいです!またぜひ、良い物がありましたら、お買い物させていただきます。大満足しております。
    ブランド偽物 http://www.bagtojapan.com/clocks/philippe/index.html

  6. ブランド コピー 0

    メール、確認の電話、梱包。すべて丁寧です。
    特に梱包はかなりしっかりしていました。
    こちらのお店を利用してよかったです。
    信頼できるお店なのでまた利用したいです。

  7. ブランド財布コピー 0

    私たちの店でのアイテムの最高品質をお楽しみください
    100ブランドのコレクション
    最高品質のアイテムアウトレットクリアランス販売
    工場価格と送料無料で
    2017【新商品!】送料無料!
    【本物安い】品質100%保証!
    【信頼老舗】激安販売中!
    【限定価格セール!】激安本物
    『今季の新作』【送料無料】
    Japan最新の人気、本物保証!
    ※激安販売※【新入荷】
    【正規品.激安】送料無料!
    安くて最高の品質、海外通販!
    新作登場、2017【爆安通販】
    オンラインストア購入する
    ブランド財布コピー http://www.ginza66.com/copy-19-b0.html

  8. 韩国时尚购物起义 0

    谢谢你的访问,如果不满意,请告诉我们。

  9. 陶笛100 1

    速度很快,站长厉害。php7效果拔群,以后能请站长帮忙安装吗

  10. 张戈 2

    带宽没有100兆吧?这么土豪?

    • rainman rainman

      @张戈 QAQ 按使用量计费……
      就是那种一个月只要40的… :roll:

      • 张戈博客 2

        @rainman 了解了

        • rainman rainman

          @张戈博客 100M 也太土豪了….

          • 张戈博客 2

            @rainman 这要是被人攻击一下或刷一下,要亏惨。。:grin:

          • rainman rainman

            @张戈博客 T_T 是啊,我在想能不能买一台 0M 带宽的服务器,之走内网,专门用来处理动态…这样没有公网 ip 会不会安全一点…

  11. 筛宝 1

    有些牛X

  12. 爱你文字网 0

    现在很多都用阿里云了

  13. 米粒博客 3

    很实用 收藏了 不久的将来 用得上 目前用的2年免费的阿里云虚拟主机 还有一年

    • rainman rainman

      @米粒博客 虚拟主机挺方便的…服务器的话主要就是折腾 QAQ

      • 米粒博客 3

        @rainman 虚拟机速度没那么快

      • 薛峰博客 2

        @rainman 阿里云的虚拟主机还是很稳定的,速度也不错,对于网站不是很大的就没必要使用服务器了

        • rainman rainman

          @薛峰博客 虚拟主机应该比服务器更稳定…速度应该也没有出入,主要是服务器更方便点,比如我的博客启用了 php7,而现在市面上还找不到 php7 的主机…

评论加载中...

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: