houjinkai 2020-01-17
本文介绍的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服务器。
有一点不同的是在LNMP结构里php会启动一个服务:php-fpm,而LANP中php只是作为Apache的一个模块存在。Nginx会把用户的动态请求交给php服务去处理,这个php服务就会去和数据库进行交互。用户的静态请求Nginx会直接处理,Nginx处理静态请求的速度要比Apache快很多性能上要好,所以Apache和Nginx在动态请求处理上区别不大,但如果是静态请求处理的话就会明显发现Nginx要快于Apache,而且Nginx能承受的并发量要比Apache大,可以承受好几万的并发量,所以大一些的网站都会使用Nginx作为web服务器。
系统平台: CentOS 7.3
Server: 192.168.8.55
# 写hosts记录 [ ~]# echo "192.168.8.55 LNMP" >> /etc/hosts # 关闭firewalld和selinux [ ~]# 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 [ ~]# setenforce 0 [ ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘ /etc/selinux/config
本文不使用yum安装,如需要使用yum安装LNMP环境,则需搭建epel第三方yum仓库。本文主要使用源码包安装,如下标题第四、五、六。
[ ~]# yum –y install gcc gcc-c++ ncurses-devel perl
安装epel扩展yum的软件包,用于在本机生成epel扩展yum配置文件。
[ ~]# rpm -Uvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm [ ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm [ ~]# rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
配置好epel的yum源安装相应的基础模块,可以使用yum直接安装。
# 安装Apache [ ~]# yum -y install httpd # 安装数据库 [ ~]# yum -y install mariadb # 安装php7.0 [ ~]# yum -y install php70w php70w-devel # 安装php扩展 [ ~]# 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 [ ~]# yum install -y php70w-fpm
[ ~]# yum -y remove mariadb [ ~]# yum -y remove mysql [ ~]# rm -rf /usr/local/mysql [ ~]# rm -rf /usr/src/mysql-5.7.18/ [ ~]# rm -rf /var/lib/mysql/ [ ~]# rm /etc/my.cnf
[ ~]# yum –y install libevent* libtool* autoconf* libstd* ncurse* bison* openssl* # MySQL 5.5之后的版本需要cmake(c语言编译器)来进行编译安装 [ ~]# yum -y install cmake
# MySQL 5.7 之后的版本,cmake编译需要boost类库 # 下载 [ ~]# wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz # 解压 [ ~]# tar zxvf boost_1_59_0.tar.gz -C /usr/local/ # 重命名 [ ~]# mv /usr/local/boost_1_59_0/ /usr/local/boost/
[ ~]# wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17.tar.gz # 解压到/usr/src/目录 [ ~]# tar zxvf mysql-5.7.17.tar.gz -C /usr/src/
# 进入解压之后的/usr/src/mysql-5.7.17/目录 [ ~]# cd /usr/src/mysql-5.7.17/ [ 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 [ro mysql-5.7.17]# make [ 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用户
[ ~]# groupadd mysql [ ~]# useradd -M -g mysql -s /sbin/nologin mysql
(2)配置文件my.cnf
[ ~]# vim /etc/my.cnf
# 修改为以下内容,其它全部删掉 [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设置的路径) [ ~]# mkdir /data/ # 创建cmake命令中的-DMYSQL_UNIX_ADDR设置的路径) [ ~]# mkdir /var/lib/mysql57/ [ ~]# mkdir /var/run/mysql57 [ ~]# mkdir /var/log/mysql57/ # 修改权限 [ ~]# chown -R mysql:mysql /usr/local/mysql57/ /data/ /var/lib/mysql57/ /var/log/mysql57/ /var/run/mysql57
# 初始化MySQL服务 [ ~]# cd /usr/local/mysql57/ [ mysql57]# ./bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57/ --datadir=/data/ # 启动MySQL服务 [ ~]# /usr/local/mysql57/support-files/mysql.server start 初始化之后,启动mysql57数据库,但是路径太长,操作起来很麻烦,我们可以把MySQL设置为系统服务,如下步骤。
[ 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
[ ~]# systemctl enable mysql57.service
[ ~]# systemctl restart mysql57.service [ ~]# lsof -i:3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 24965 mysql 16u IPv6 44563 0t0 TCP *:mysql (LISTEN)
# 登陆MySQL数据库 [ ~]# /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)
[ ~]# 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,则需要手动编译安装。
[ ~]# wget https://sourceforge.mirrorservice.org/m/mc/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz [ ~]# tar zxvf libmcrypt-2.5.8.tar.gz -C /usr/src/ [ ~]# cd /usr/src/libmcrypt-2.5.8/ [r libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt [ libmcrypt-2.5.8]# make [ libmcrypt-2.5.8]# make install [ libmcrypt-2.5.8]# /sbin/ldconfig --重新加载系统库包
[ ~]# wget http://cn2.php.net/distributions/php-7.2.5.tar.gz [ ~]# tar zxvf php-7.2.5.tar.gz -C /usr/src/
# 进入解压之后的/usr/src/php-7.2.5/目录 [ ~]# cd /usr/src/php-7.2.5/ [ 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 [ php-7.2.5]# make [ 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/目录下) [ ~]# cp /usr/src/php-7.2.5/php.ini-development /usr/local/php/etc/php.ini [ ~]# 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去掉 [ ~]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf [ ~]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
可以在这些配置文件修改的选项有:
[ ~]# vim /usr/local/php/etc/php-fpm.d/www.conf # 修改以下内容,并把注释“;”去掉 user = www-data group = www-data listen = /var/run/fastcgi/fastcgi.socket listen.owner = www-data listen.group = www-data listen.mode = 0660 pm.max_children = 64 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 3000 rlimit_files = 65535 php_flag[display_errors] = on
这三行是控制启动fastcgi之后的socket文件的权限(特别是新版本的PHP,修复了以前socket访问权限的bug,所以这里指定好权限,那么Nginx才能有权限读取socket来访问fastcgi)
[ ~]# groupadd www-data [ ~]# useradd -M -g www-data -s /sbin/nologin www-data [ ~]# mkdir /var/run/fastcgi # 使用Nginx用户的权限 [ ~]# chown -R nginx.nginx /var/run/fastcgi/
# 启动fastcgi,直接这样启动,5.3.3版本之前的php需要加start参数来启动 [ ~]# /usr/local/php/sbin/php-fpm [ ~]# 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 [ ~]# 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设置为系统服务,使用系统命令进行启动,操作步骤如下。
[ ~]# 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
[ ~]# systemctl enable php-fpm.service
[ ~]# systemctl start php-fpm.service
# Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法 [ ~]# yum -y install pcre pcre-devel # Nginx的各种模块中需要使用gzip压缩 [ ~]# yum -y install zlib zlib-devel # Nginx的安全套接字层密码库 [ ~]# yum -y install openssl openssl-devel
[ ~]# wget http://nginx.org/download/nginx-1.12.2.tar.gz # 解压到/usr/src/目录 [ ~]# tar zxvf nginx-1.12.2.tar.gz -C /usr/src/
# 进入解压之后的/usr/src/nginx-1.12.2/目录 [ ~]# cd /usr/src/nginx-1.12.2/ # --with-http_stub_status_module模块记得要加,后面做查看nginx状态需要这个模块 [ 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 [ nginx-1.12.2]# make [ 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模块
[ ~]# groupadd nginx [ ~]# useradd -M -g nginx -s /sbin/nologin nginx
[ ~]# vim /usr/local/nginx/conf/nginx.conf # 设置参数如下: user nginx nginx; # 运行用户和组 worker_processes 1; # 启动ngnix的服务的工作进程数 error_log logs/error.log; # 打开注释,错误日志以及日志等级 pid logs/nginx.pid; # 打开注释,pid文件 events { worker_connections 65535; # 每个进程允许打开的并发连接数 } http { include mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; # 打开注释 keepalive_timeout 65; # 打开注释 gzip on; server { listen 80; # 监听的端口 server_name 192.168.8.55; # 主机名或者IP charset utf-8; # 字符集 location / { root /web; # 根目录,可以使用相对路径(/usr/local/nginx),也可以使用绝对路径,去掉location{ } index index.php index.html index.htm; # 主页文件 } location ~ \.php$ { fastcgi_connect_timeout 300; fastcgi_read_timeout 300; fastcgi_send_timeout 300; fastcgi_pass unix:/var/run/fastcgi/fastcgi.socket; # 对应配置php-fpm.conf里的设置 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_ script_name; # 把/scripts改成$document_root,表示家目录下的.php文件也当会以php来执行,否则可能出现白面 include fastcgi.conf; }
# 把定义的网站家目录也创建出来 [ ~]# mkdir /web # 检测nginx.conf是否配置正确 [ ~]# /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
错误一:
[ ~]# /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;
[ ~]# ulimit -SHn 65535错误二:
[ ~]# /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
[ ~]# vim /etc/security/limits.con # 添加以下内容 nginx soft nofile 65535 nginx hard nofile 65535 root soft nofile 65535 root hard nofile 65535 # 启动Nginx服务 [ ~]# /usr/local/nginx/sbin/nginx # 停止Nginx服务 [ ~]# /usr/local/nginx/sbin/nginx -s stop
同样,Nginx服务启动和停止路径太长,不方便操作,我们可以把Nginx设置为系统服务,使用系统命令进行启动,操作步骤如下。
[ ~]# 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
[ ~]# systemctl enable nginx.service
[ ~]# systemctl start nginx.service # 查看nginx是否启动成功: [ ~]# lsof -i:80
在浏览器中访问测试:
http://192.168.8.55
出现以下界面则表示可以成功访问:
建立一个主页,在家目录下建立一个PHP测试页来测试
[ ~]# vim /web/index.php <?php phpinfo(); ?>
在浏览器中访问测试:
http://192.168.8.55
至此,LNMP环境搭建完成!
安装一个开源论坛,验证LNMP环境配置是否正常。
# 下载 [ ~]# wget http://zj.mycodes.net/201712/Discuz_X3.4_GIT_SC_GBK.zip # 解压 [ ~]# unzip Discuz_X3.4_GIT_SC_GBK.zip -d /web/ [ ~]# cd /web/ # 重命名 [ web]# mv /web/dir_SC_GBK/ /web/discuz [ discuz]# cd /web/discuz/ [ discuz]# ls readme upload utility # 移动 [ discuz]# mv upload/* ./ [ discuz]# mv readme/* ./ [ discuz]# mv utility/* ./
在浏览器中访问测试
http://192.168.8.55/discuz/install
进入安装向导
点击“我同意”。
目录、文件权限检查状态为不可写,需要修改权限,用户改成daemon。
[ ~]# chmod -R a+w /web/ [ ~]# chown -R daemon.daemon /web/
修改完成之后,刷新浏览器,点击“下一步”。
选择“全新安装Discuz!X(含Ucenter Server)”,点击“下一步”。
安装数据库,需要MySQL数据库授权:
# 登陆MySQL数据库 [ ~]# /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论坛的首页。