本文介紹的LNMP環境各個軟件的版本爲:Centos7 + Nginx1.12.2 + Mysql-5.7.17 + PHP7.2.5。本文是在假設Centos7已經安裝完成的前提下進行介紹的,若還沒有安裝,能夠前往Centos官網下載對應的ios文件安裝,下載地址:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso。
LNMP架構和LAMP架構挺像的,只不過一個用的是Apach,一個用的是Nginx。LNMP就是Linux+Nginx+MySQL+PHP,Nginx和Apache同樣都是web服務器。php
有一點不一樣的是在LNMP結構裏php會啓動一個服務:php-fpm,而LANP中php只是做爲Apache的一個模塊存在。Nginx會把用戶的動態請求交給php服務去處理,這個php服務就會去和數據庫進行交互。用戶的靜態請求Nginx會直接處理,Nginx處理靜態請求的速度要比Apache快不少性能上要好,因此Apache和Nginx在動態請求處理上區別不大,但若是是靜態請求處理的話就會明顯發現Nginx要快於Apache,並且Nginx能承受的併發量要比Apache大,能夠承受好幾萬的併發量,因此大一些的網站都會使用Nginx做爲web服務器。html
系統平臺: CentOS 7.3
Server: 192.168.8.55mysql
# 寫hosts記錄 [root@LNMP ~]# echo "192.168.8.55 LNMP" >> /etc/hosts # 關閉firewalld和selinux [root@LNMP ~]# systemctl stop firewalld && systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. # 關閉selinux [root@LNMP ~]# setenforce 0 [root@LNMP ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
本文不使用yum安裝,如須要使用yum安裝LNMP環境,則需搭建epel第三方yum倉庫。本文主要使用源碼包安裝,以下標題第4、5、六。linux
[root@LNMP ~]# yum –y install gcc gcc-c++ ncurses-devel perl
安裝epel擴展yum的軟件包,用於在本機生成epel擴展yum配置文件。ios
[root@LNMP ~]# rpm -Uvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm [root@LNMP ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm [root@LNMP ~]# rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
配置好epel的yum源安裝相應的基礎模塊,可使用yum直接安裝。nginx
# 安裝Apache [root@LAMP ~]# yum -y install httpd # 安裝數據庫 [root@LAMP ~]# yum -y install mariadb # 安裝php7.0 [root@LAMP ~]# yum -y install php70w php70w-devel # 安裝php擴展 [root@LAMP ~]# yum install -y php70w-mysql.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 # 安裝PHP-FPM [root@LAMP ~]# yum install -y php70w-fpm
[root@LNMP ~]# yum -y remove mariadb [root@LNMP ~]# yum -y remove mysql [root@LNMP ~]# rm -rf /usr/local/mysql [root@LNMP ~]# rm -rf /usr/src/mysql-5.7.18/ [root@LNMP ~]# rm -rf /var/lib/mysql/ [root@LNMP ~]# rm /etc/my.cnf
[root@LNMP ~]# yum –y install libevent* libtool* autoconf* libstd* ncurse* bison* openssl* # MySQL 5.5以後的版本須要cmake(c語言編譯器)來進行編譯安裝 [root@LNMP ~]# yum -y install cmake
# MySQL 5.7 以後的版本,cmake編譯須要boost類庫 # 下載 [root@LNMP ~]# wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz # 解壓 [root@LNMP ~]# tar zxvf boost_1_59_0.tar.gz -C /usr/local/ # 重命名 [root@LNMP ~]# mv /usr/local/boost_1_59_0/ /usr/local/boost/
[root@LNMP ~]# wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17.tar.gz # 解壓到/usr/src/目錄 [root@LNMP ~]# tar zxvf mysql-5.7.17.tar.gz -C /usr/src/
# 進入解壓以後的/usr/src/mysql-5.7.17/目錄 [root@LNMP ~]# cd /usr/src/mysql-5.7.17/ [root@LNMP mysql-5.7.17]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql57 -DMYSQL_DATADIR=/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql57/mysql57.socket -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=/usr/local/boost [root@LNMP mysql-5.7.17]# make [root@LNMP mysql-5.7.17]# make install
**cmake編譯配置參數說明:** -DCMAKE_INSTALL_PREFIX=dir_name # 安裝的主目錄 -DMYSQL_DATADIR=dir_name MySQL # 文件目錄的路徑,這個參數也能夠在啓動MySQL的時候帶上--datadir參數進行設置 -DSYSCONFDIR=dir_name my.cnf # 參數文件的路徑 -DWITH_INNOBASE_STORAGE_ENGINE=1 # 將INNODB存儲引擎編譯進去 -DWITH_MYISAM_STORAGE_ENGINE=1 # 將INNODB存儲引擎編譯進去 -DWITH_MEMORY_STORAGE_ENGINE=1 # 安裝memory存儲引擎 -DWITH_READLINE=bool # 是否使用readline庫 -DMYSQL_UNIX_ADDR=file_name Unix socket # 文件的路徑,socket文件用於服務器監聽鏈接,這個參數必須是絕對路徑 -DMYSQL_TCP_PORT=port_num # 服務器監聽TCP/IP鏈接的端口,默認是3306 -DENABLED_LOCAL_INFILE=1 # 是否打開LOAD DATA INFILE的LOCAL參數 -DWITH_PARTITION_STORAGE_ENGINE=1 # 將分區存儲引擎編譯進去 -DEXTRA_CHARSETS=all # 安裝全部擴展字符集 -DDEFAULT_CHARSET # 字符集,默認字符集是latin1 -DDEFAULT_COLLATION=collation_name # 服務校對,默認的是latin1_swedish_ci,能夠經過SHOW COLLATION語句查看哪一個校對匹配的字符集 -DWITH_BOOST # boost類庫所在目錄 -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 # 將FEDERATED存儲引擎編譯進去 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 # 將BLACKHOLE存儲引擎編譯進去 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 # 不編譯EXAMPLE存儲引擎 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 # 將Performance Schema(性能視圖)存儲引擎編譯進去 -DCOMPILATION_COMMENT=string # 編譯環境描述 -DENABLED_PROFILING=bool # 是否開啓profiling代碼的查詢(用於SHOW PROFILE and SHOW PROFILES語句) -DWITH_EXTRA_CHARSETS=name # 指定額外的字符集,默認是all,包含全部的字符集。 -DINSTALL_BINDIR=dir_name # 安裝用戶程序的路徑,默認路徑是DCMAKE_INSTALL_PREFIX/bin -DINSTALL_DOCDIR=dir_name #安裝文檔的路徑,默認路徑是DCMAKE_INSTALL_PREFIX/doc -DINSTALL_INCLUDEDIR=dir_name #安裝頭文件的路徑,默認路徑是DCMAKE_INSTALL_PREFIX/include -DINSTALL_LIBDIR=dir_name # 安裝庫文件的路徑,默認路徑是DCMAKE_INSTALL_PREFIX/lib -DINSTALL_MANDIR=dir_name #安裝幫助手冊的路徑,默認路徑是DCMAKE_INSTALL_PREFIX/man -DINSTALL_PLUGINDIR=dir_name # 安裝插件的路徑,默認路徑是DCMAKE_INSTALL_PREFIX/lib/plugin -DINSTALL_SBINDIR=dir_name # 安裝mysqld服務端啓動腳本的路徑,默認路徑是DCMAKE_INSTALL_PREFIX/bin -DINSTALL_SCRIPTDIR=dir_name # 初始化MySQL數據庫的數據文件路徑的mysql_install_db腳本路徑,默認路徑是DCMAKE_INSTALL_PREFIX/scripts -DINSTALL_SQLBENCHDIR=dir_name # 安裝sql-bench的路徑,默認路徑是DCMAKE_INSTALL_PREFIX -DINSTALL_SUPPORTFILESDIR=dir_name # 安裝支持文件的路徑,默認路徑是DCMAKE_INSTALL_PREFIX/support-files # 如若要編譯進其它功能,如SSL等,則可以使用相似以下選項來實現編譯時使用某庫或不使用某庫: -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0
(1)建立id爲27的mysql用戶c++
[root@LNMP ~]# groupadd mysql [root@LNMP ~]# useradd -M -g mysql -s /sbin/nologin mysql
(2)配置文件my.cnf
[root@LNMP ~]# vim /etc/my.cnfweb
# 修改成如下內容,其它所有刪掉 [mysqld] port=3306 datadir=/data pid-file=/var/run/mysql57/mysql57.pid socket=/var/lib/mysql57/mysql57.socket log-error=/var/log/mysql57/mysql57.log user=mysql [client] socket=/var/lib/mysql57/mysql57.socket
(3)建立相關目錄,並修改權限正則表達式
# 建立cmake命令中的-DMYSQL_DATADIR設置的路徑) [root@LNMP ~]# mkdir /data/ # 建立cmake命令中的-DMYSQL_UNIX_ADDR設置的路徑) [root@LNMP ~]# mkdir /var/lib/mysql57/ [root@LNMP ~]# mkdir /var/run/mysql57 [root@LNMP ~]# mkdir /var/log/mysql57/ # 修改權限 [root@LNMP ~]# chown -R mysql:mysql /usr/local/mysql57/ /data/ /var/lib/mysql57/ /var/log/mysql57/ /var/run/mysql57
# 初始化MySQL服務 [root@LNMP ~]# cd /usr/local/mysql57/ [root@LNMP mysql57]# ./bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57/ --datadir=/data/ # 啓動MySQL服務 [root@LNMP ~]# /usr/local/mysql57/support-files/mysql.server start 初始化以後,啓動mysql57數據庫,可是路徑太長,操做起來很麻煩,咱們能夠把MySQL設置爲系統服務,以下步驟。
[root@LNMP mysql57]# vim /lib/systemd/system/mysql57.service # 添加文件內容以下: [Unit] Description=mysql After=network.target [Service] Type=forking ExecStart=/usr/local/mysql57/support-files/mysql.server start ExecStop=/usr/local/mysql57/support-files/mysql.server stop ExecRestart=/usr/local/mysql57/support-files/mysql.server restart ExecReload=/usr/local/mysql57/support-files/mysql.server reload PrivateTmp=true [Install] WantedBy=multi-user.target
[root@LNMP ~]# systemctl enable mysql57.service
[root@LNMP ~]# systemctl restart mysql57.service [root@LNMP ~]# lsof -i:3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 24965 mysql 16u IPv6 44563 0t0 TCP *:mysql (LISTEN)
# 登錄MySQL數據庫 [root@LNMP ~]# /usr/local/mysql57/bin/mysql mysql> update mysql.user set authentication_string=password('123') where user='root' and host = 'localhost'; Query OK, 1 row affected, 1 warning (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 1 mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
[root@LNMP ~]# yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel
若提示yum中沒有可用的軟件包libmcrypt和libmcrypt-devel,則須要手動編譯安裝。算法
[root@LNMP ~]# wget https://sourceforge.mirrorservice.org/m/mc/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz [root@LNMP ~]# tar zxvf libmcrypt-2.5.8.tar.gz -C /usr/src/ [root@LNMP ~]# cd /usr/src/libmcrypt-2.5.8/ [root@LNMP libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt [root@LNMP libmcrypt-2.5.8]# make [root@LNMP libmcrypt-2.5.8]# make install [root@LNMP libmcrypt-2.5.8]# /sbin/ldconfig --從新加載系統庫包
[root@LNMP ~]# wget http://cn2.php.net/distributions/php-7.2.5.tar.gz [root@LNMP ~]# tar zxvf php-7.2.5.tar.gz -C /usr/src/
# 進入解壓以後的/usr/src/php-7.2.5/目錄 [root@LNMP ~]# cd /usr/src/php-7.2.5/ [root@LNMP php-7.2.5]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/etc/php.d --with-mysqli=/usr/local/mysql57/bin/mysql_config --with-iconv-dir=/usr/local --enable-mysqlnd --with-pdo-mysql=/usr/local/mysql57 --with-pcre-dir=/usr/local/ --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-gd --with-iconv --with-zlib --with-libxml-dir=/usr --enable-xml --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-ftp --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache --enable-bcmath [root@LNMP php-7.2.5]# make [root@LNMP php-7.2.5]# make install
**configure編譯配置參數說明:** --prefix # 用於指定PHP安裝目錄 --with-config-file-path # 指定php.ini位置 --with-config-file-scan-dir # 指定php.d位置 --with-mysqli # mysqli文件目錄,優化支持 --with-iconv-dir # 用於 PHP 編譯時指定 iconv 在系統裏的路徑,不然會掃描默認路徑 --with-iconv # 使編譯iconv時不被禁用 --enable-mysqlnd # 啓用mysqlnd的庫來支持mysql的鏈接s --with-pdo-mysql # MySQ安裝目錄,對MySQL的支持 --with-pcre-dir # perl的正則庫案安裝位置 --enable-fpm # 打上PHP-fpm 補丁後纔有這個參數,CGI方式安裝的啓動程序 --with-fpm-user # 設置 FPM 運行的用戶身份(默認 - nobody) --with-fpm-group # 設置 FPM 運行時的用戶組(默認 - nobody) --with-fpm-systemd # 啓用 systemd 集成 (默認 - no) --with-fpm-acl # 使用POSIX 訪問控制列表 (默認 - no) 5.6.5版本起有效 --with-gd # 啓用gd庫的支持 --with-zlib # 啓用zlib庫的支持 --with-libxml-dir # 啓用libxml2庫的支持 --enable-xml # 啓用xml庫支持 --enable-shmop # 啓用shmop函數支持 --enable-inline-optimization # 優化線程 --enable-mbstring # 多字節,字符串的支持 --enable-ftp # 啓用ftp的支持 --with-openssl # openssl的支持,加密傳輸時用到的 --enable-pcntl # freeTDS須要用到的,多是連接mssql 纔用到 --enable-sockets # 啓用 sockets 支持 --with-xmlrpc # 啓用xml-rpc的c語言 --enable-zip # 啓用對zip的支持 --enable-soap # 啓用soap模塊的支持 --without-pear # 不安裝PEAR --with-gettext # 啓用gnu 的gettext 支持,編碼庫用到 --enable-session # 啓用session模塊的支持 --with-curl # 啓用curl瀏覽工具的支持 --with-jpeg-dir # 啓用對jpeg圖片的支持 --with-freetype-dir # 啓用對freetype字體庫的支持 --enable-opcache # 啓用opcache共享擴展的支持 --with-mcrypt # 指定的是libmcrypt的安裝目錄 --enable-safe-mode # 啓用安全模式 --with-bz2 # 啓用對bz2文件的支持 --with-png-dir # 啓用對png圖片的支持 --without-iconv # 關閉iconv函數,一種字符集間的轉換 --enable-gd-native-ttf # 支持TrueType字符串函數庫 --with-curlwrappers # 運用curl工具啓用url流 --with-ttf # 啓用freetype1.*的支持,能夠不加了 --with-xsl # 啓用XSLT 文件支持,擴展了libXML2庫 ,須要libxslt軟件 --with-pear # 啓用pear命令的支持,PHP擴展用的 --enable-calendar # 啓用日曆擴展功能 --enable-bcmath # 啓用圖片大小調整,用到zabbix監控的時候用到了這個模塊 --enable-exif # 圖片的元數據支持 --enable-magic-quotes # 魔術引用的支持 --disable-rpath # 關閉額外的運行庫文件 --disable-debug # 關閉調試模式 --with-mime-magic=/usr/share/file/magic.mime # 魔術頭文件位置 --enable-fastCGI # 支持fastcgi方式啓動PHP --with-ncurses # 支持ncurses 屏幕繪製以及基於文本終端的圖形互動功能的動態庫 --enable-pcntl # freeTDS須要用到的,多是連接mssql 纔用到 --with-mcrypt # 啓用mcryp算法 --with-mhash # 企業mhas算法 --with-gdbm # dba的gdbm支持 --enable-zend-multibyte # 支持zend的多字節
將PHP包解壓目錄中的配置文件放置到/usr/local/php/etc/目錄下(也就是configure命令中的--with-config-file-path設置的路徑)
# sysconfigdir參數決定的(由於,指定安裝路徑爲/usr/local/php,因此就要拷到/usr/local/php/etc/目錄下) [root@LNMP ~]# cp /usr/src/php-7.2.5/php.ini-development /usr/local/php/etc/php.ini [root@LNMP ~]# vim /usr/local/php/etc/php.ini # 修改如下內容 1013 pdo_mysql.default_socket=/var/lib/mysql57/mysql57.socket # 對應的socket文件地址 1154 mysqli.default_port = 3306 # 改爲對應的MySQL的端口 1159 mysqli.default_socket = /var/lib/mysql57/mysql57.socket # 對應的socket文件地址
配置php-fpm配置文件(配置fastcgi)
# 先更名,把.default去掉 [root@LNMP ~]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf [root@LNMP ~]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
能夠在這些配置文件修改的選項有:
[root@LNMP ~]# vim /usr/local/php/etc/php-fpm.d/www.conf # 修改如下內容,並把註釋「;」去掉 23 user = www-data 24 group = www-data 36 listen = /var/run/fastcgi/fastcgi.socket 47 listen.owner = www-data 48 listen.group = www-data 49 listen.mode = 0660 113 pm.max_children = 64 118 pm.start_servers = 20 123 pm.min_spare_servers = 5 128 pm.max_spare_servers = 35 139 pm.max_requests = 3000 344 rlimit_files = 65535 420 php_flag[display_errors] = on
這三行是控制啓動fastcgi以後的socket文件的權限(特別是新版本的PHP,修復了之前socket訪問權限的bug,因此這裏指定好權限,那麼Nginx纔能有權限讀取socket來訪問fastcgi)
[root@LNMP ~]# groupadd www-data [root@LNMP ~]# useradd -M -g www-data -s /sbin/nologin www-data [root@LNMP ~]# mkdir /var/run/fastcgi # 使用Nginx用戶的權限 [root@LNMP ~]# chown -R nginx.nginx /var/run/fastcgi/
# 啓動fastcgi,直接這樣啓動,5.3.3版本以前的php須要加start參數來啓動 [root@LNMP ~]# /usr/local/php/sbin/php-fpm [root@LNMP ~]# ll /var/run/fastcgi/ 總用量 0 # 啓動事後,就能夠在/var/run/fastcgi/目錄下找到socket文件 srw-rw---- 1 www-data www-data 0 5月 15 16:44 fastcgi.socket # 也能夠用此命令來查看php的factcgi的進程,有20個進程,由於我在前面配置pm.start_servers = 20 [root@LNMP ~]# ps -ef | grep fpm root 62646 1 0 16:44 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf) www-data 62647 62646 0 16:44 ? 00:00:00 php-fpm: pool www www-data 62648 62646 0 16:44 ? 00:00:00 php-fpm: pool www ……
一樣,php-fpm服務啓動和中止路徑太長,不方便操做,咱們能夠把php-fpm設置爲系統服務,使用系統命令進行啓動,操做步驟以下。
[root@LNMP ~]# vim /etc/systemd/system/php-fpm.service # 添加文件內容以下: [Unit] Description=php-fpm After=network.target [Service] Type=forking ExecStart=/usr/local/php/sbin/php-fpm # 只有啓動 PrivateTmp=True [Install] WantedBy=multi-user.target
[root@LNMP ~]# systemctl enable php-fpm.service
[root@LNMP ~]# systemctl start php-fpm.service
# Nginx的Rewrite模塊和HTTP核心模塊會使用到PCRE正則表達式語法 [root@LNMP ~]# yum -y install pcre pcre-devel # Nginx的各類模塊中須要使用gzip壓縮 [root@LNMP ~]# yum -y install zlib zlib-devel # Nginx的安全套接字層密碼庫 [root@LNMP ~]# yum -y install openssl openssl-devel
[root@LNMP ~]# wget http://nginx.org/download/nginx-1.12.2.tar.gz # 解壓到/usr/src/目錄 [root@LNMP ~]# tar zxvf nginx-1.12.2.tar.gz -C /usr/src/
# 進入解壓以後的/usr/src/nginx-1.12.2/目錄 [root@LNMP ~]# cd /usr/src/nginx-1.12.2/ # --with-http_stub_status_module模塊記得要加,後面作查看nginx狀態須要這個模塊 [root@LNMP nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module [root@LNMP nginx-1.12.2]# make [root@LNMP nginx-1.12.2]# make install
**configure編譯配置參數說明:** --prefix # 用於指定Nginx編譯後的安裝目錄 --user # 設置Nginx運行的用戶身份(默認 - nobody) --group # 設置Nginx運行的用戶組(默認 - nobody) --add-module # 爲添加的第三方模塊,這次添加了fdfs的Nginx模塊 --with..._module # 表示啓用的Nginx模塊,如此處啓用了http_ssl_module模塊
[root@LNMP ~]# groupadd nginx [root@LNMP ~]# useradd -M -g nginx -s /sbin/nologin nginx
[root@LNMP ~]# vim /usr/local/nginx/conf/nginx.conf # 設置參數以下: 2 user nginx nginx; # 運行用戶和組 3 worker_processes 1; # 啓動ngnix的服務的工做進程數 5 error_log logs/error.log; # 打開註釋,錯誤日誌以及日誌等級 9 pid logs/nginx.pid; # 打開註釋,pid文件 12 events { 13 worker_connections 65535; # 每一個進程容許打開的併發鏈接數 14 } 17 http { 18 include mime.types; 19 default_type application/octet-stream; 27 sendfile on; 28 tcp_nopush on; # 打開註釋 31 keepalive_timeout 65; # 打開註釋 33 gzip on; 35 server { 36 listen 80; # 監聽的端口 37 server_name 192.168.8.55; # 主機名或者IP 39 charset utf-8; # 字符集 43 location / { 44 root /web; # 根目錄,可使用相對路徑(/usr/local/nginx),也可使用絕對路徑,去掉location{ } 45 index index.php index.html index.htm; # 主頁文件 46 } 65 location ~ \.php$ { 66 fastcgi_connect_timeout 300; 67 fastcgi_read_timeout 300; 68 fastcgi_send_timeout 300; 69 fastcgi_pass unix:/var/run/fastcgi/fastcgi.socket; # 對應配置php-fpm.conf裏的設置 70 fastcgi_index index.php; 71 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_ script_name; # 把/scripts改爲$document_root,表示家目錄下的.php文件也當會以php來執行,不然可能出現白麪 72 include fastcgi.conf; 73 }
# 把定義的網站家目錄也建立出來 [root@LNMP ~]# mkdir /web # 檢測nginx.conf是否配置正確 [root@LNMP ~]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
錯誤一:
[root@LNMP ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: [warn] 65535 worker_connections exceed open file resource limit: 1024
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
因爲修改系統打開的文件限制數,致使啓動時會有警告,由於個人配置worker_connections 65535;
[root@LNMP ~]# ulimit -SHn 65535錯誤二:
[root@LNMP ~]# /usr/local/nginx/sbin/nginx -t
nginx: [emerg] "fastcgi_pass" directive is duplicate in /usr/local/nginx/conf/nginx.conf:69
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
fastcgi_pass文件路徑有錯,由於這個路徑是由php-fpm服務啓動以後產生的socket的文件路徑,若是沒有,啓動php-fpm服務便可。
一旦上面的修改重啓電腦後不生效,若是要開機就生效可使用下面的兩種方法之一
方法一:把上面的命令加到/etc/rc.local裏
方法二:寫進配置文件/etc/security/limits.conf
[root@LNMP ~]# vim /etc/security/limits.con # 添加如下內容 nginx soft nofile 65535 nginx hard nofile 65535 root soft nofile 65535 root hard nofile 65535 # 啓動Nginx服務 [root@LNMP ~]# /usr/local/nginx/sbin/nginx # 中止Nginx服務 [root@LNMP ~]# /usr/local/nginx/sbin/nginx -s stop
一樣,Nginx服務啓動和中止路徑太長,不方便操做,咱們能夠把Nginx設置爲系統服務,使用系統命令進行啓動,操做步驟以下。
[root@LNMP ~]# vim /lib/systemd/system/nginx.service # 添加文件內容以下: [Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target
[root@LNMP ~]# systemctl enable nginx.service
[root@LNMP ~]# systemctl start nginx.service # 查看nginx是否啓動成功: [root@LNMP ~]# lsof -i:80
在瀏覽器中訪問測試:
http://192.168.8.55
出現如下界面則表示能夠成功訪問:
創建一個主頁,在家目錄下創建一個PHP測試頁來測試
[root@LNMP ~]# vim /web/index.php <?php phpinfo(); ?>
在瀏覽器中訪問測試:
http://192.168.8.55
至此,LNMP環境搭建完成!
安裝一個開源論壇,驗證LNMP環境配置是否正常。
# 下載 [root@LNMP ~]# wget http://zj.mycodes.net/201712/Discuz_X3.4_GIT_SC_GBK.zip # 解壓 [root@LNMP ~]# unzip Discuz_X3.4_GIT_SC_GBK.zip -d /web/ [root@LNMP ~]# cd /web/ # 重命名 [root@LNMP web]# mv /web/dir_SC_GBK/ /web/discuz [root@LNMP discuz]# cd /web/discuz/ [root@LNMP discuz]# ls readme upload utility # 移動 [root@LNMP discuz]# mv upload/* ./ [root@LNMP discuz]# mv readme/* ./ [root@LNMP discuz]# mv utility/* ./
在瀏覽器中訪問測試
http://192.168.8.55/discuz/install
進入安裝嚮導
點擊「我贊成」。
目錄、文件權限檢查狀態爲不可寫,須要修改權限,用戶改爲daemon。
[root@LNMP ~]# chmod -R a+w /web/ [root@LNMP ~]# chown -R daemon.daemon /web/
修改完成以後,刷新瀏覽器,點擊「下一步」。
選擇「全新安裝Discuz!X(含Ucenter Server)」,點擊「下一步」。
安裝數據庫,須要MySQL數據庫受權:
# 登錄MySQL數據庫 [root@LNMP ~]# /usr/local/mysql57/bin/mysql -p123 # 建立一個庫,用於存放將要安裝的Discuz論壇的表 mysql> create database discuz; Query OK, 1 row affected (0.00 sec) # 受權一個用戶,用於Discuz論壇程序鏈接MySQL mysql> grant all on discuz.* to 'discuz'@'localhost' identified by '123'; Query OK, 0 rows affected, 1 warning (0.00 sec) # 刷新 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
數據庫安裝以下圖所示:
填寫完成以後,點擊「下一步」,開始安裝數據庫。能夠看到剛纔建立的discuz庫裏面有297張表(show tables discuz;)。
安裝完成以後能夠看到Discuz論壇的首頁。