当前位置:首页 > 文章 > 网站建设 > 正文内容

怎样在CentOS 7.6上使用PHP和MySQL(LEMP Stack)安装Nginx

myblog5个月前 (06-08)网站建设7303

首先我们要知道什么是Nginx

Nginx(发音为“ engine x”)是一个免费的,开源的高性能HTTP服务器。 Nginx以其稳定性,丰富的功能集,简单的配置和低资源消耗而著称。


准备

在本教程中,我将使用IP地址为192.168.1.250和主机名www.lmyblog.com。 这些设置可以替换为你的

我使用nano编辑器来编辑配置文件。安装Nano命令:

yum -y install nano

我建议安装防火墙。 如果尚未安装firewalld,并且想使用防火墙,请使用以下命令进行安装:

yum -y install firewalld

启动防火墙,并使其能够在开机时自动启动。

systemctl start firewalld.service
systemctl enable firewalld.service

接下来,打开SSH端口以确保您将能够通过SSH连接到服务器。

firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload

最新的Nginx无法从CentOS官方源中获得,因此我们在包括Nginx项目的源镜像中进行安装:

nano /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

安装MySQL(MariaDB)

首先,我们安装MariaDB作为MySQL的替代品。 MariaDB是MySQL的免费分支。 运行以下命令以安装MariaDB数据库服务器:

yum -y install mariadb mariadb-server net-tools

然后,我们输入如下命令使开机自动启动MariaDB服务器:

systemctl enable mariadb.service
systemctl start mariadb.service

现在检查是否已启用网络连接。 请注意,MraiDB服务被命名为mysql,因为它是兼容的数据库服务器。 

netstat -tap | grep mysql

内容显示如下:

[root@server1 ~]# netstat -tap | grep mysql
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN 19842/mysqld

输入:

mysql_secure_installation

为用户root设置密码(否则,任何人都可以访问您的MySQL数据库!!!):

[root@example ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):                 (回车继续)
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n]         <-- 回车
New password:        <-- 你的数据库root密码
Re-enter new password:         <-- 你的数据库root密码
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] <-- 回车
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] <-- 回车
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] <-- 回车
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] <-- 回车
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
[root@www.lmyblog.com ~]#

接下来输入:

mysql_secure_installation

安装Nginx

前边设置了Nginx从nginx.org下载,安装命令如下:

yum -y install nginx

然后设置开机自动启动:

systemctl enable nginx.service
systemctl start nginx.service

启动Nginx:

[root@www.lmyblog.com ~]# service nginx start

如果报以下错误说明80端口被占用了,有其他Web服务在运行,可能是Apache在运行

Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
                                                          [FAILED]
[root@www.lmyblog.com~]#

关闭Apache:

systemctl stop httpd.service
yum remove httpd
systemctl disable httpd.service

现在启动Nginx:

systemctl start nginx.service

打开防火墙中的HTTP和HTTPS端口:

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

结果输出如下所示:

[root@www.lmyblog.com ~]# firewall-cmd --permanent --zone=public --add-service=http
success
[root@www.lmyblog.com ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@www.lmyblog.com ~]# firewall-cmd --reload
success
[root@www.lmyblog.com ~]#

在浏览器中输入Web服务器的IP地址或主机名(例如http://192.168.1.250),您会看到Nginx欢迎页面:

nginx_welcome_page.png

接下来安装PHP:

我们可以通过PHP-FPM(FastCGI ProcessManager)使PHP 5与Nginx一起工作。PHP-FPM是一种替代的PHPFastCGI实现,它具有一些附加特性,对于任何大小的站点,特别是繁忙的站点都很有用。我们可以将php-fpm与php-cli以及一些PHP 5模块(如php-MySQL)一起安装,如果您想从PHP脚本中使用MySQL,如下所示:

yum -y install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-mbstring php-xml php-xmlrpc php-mbstring php-snmp php-soap

APC是一个免费和开放的PHP操作码缓存器,用于缓存和优化PHP中间代码。它类似于其他PHP操作代码缓存器,如eAccelerator和Xcache。强烈建议安装其中之一,以加快PHP页面的速度。

我将从PHP pecl存储库安装APC。 PECL要求安装Centos开发工具来编译APC软件包。

yum -y install php-devel
yum -y groupinstall 'Development Tools'

安装APC:

pecl install apc
[root@example ~]# pecl install apc
downloading APC-3.1.13.tgz ...
Starting to download APC-3.1.13.tgz (171,591 bytes)
.................done: 171,591 bytes
55 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
Enable internal debugging in APC [no] : <-- 回车
Enable per request file info about files used from the APC cache [no] : <-- 回车
Enable spin locks (EXPERIMENTAL) [no] : <-- 回车
Enable memory protection (EXPERIMENTAL) [no] : <-- 回车
Enable pthread mutexes (default) [no] : <-- 回车
Enable pthread read/write locks (EXPERIMENTAL) [yes] : <-- 回车
building in /var/tmp/pear-build-rootVrjsuq/APC-3.1.13
......

打开 /etc/php.ini并设置cgi.fix_pathinfo=0,在末尾加上一行:extension=apc.so

nano /etc/php.ini
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]
extension=apc.so
[...]
[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Asia/Shanghai"
[...]

为了不必要的麻烦检查下时区,图上为亚洲/上海,标准的UTC+08S时区,保存并推出.

接下来,设置php-fpm开机自动启动:

systemctl enable php-fpm.service
systemctl start php-fpm.service

PHP-FPM是一个守护进程(init脚本/etc/init.d/php-fpm),它在端口9000上运行FastCGI服务器。

配置Nginx

nginx配置位于/etc/nginx/nginx.conf中,我们现在打开该配置:

nano /etc/nginx/nginx.conf

增加辅助进程的数量,并将备活超时设置为如下:

[...]
worker_processes  4;
[...]
   keepalive_timeout  2;
[...]

虚拟主机在/etc/nginx/conf.d目录中的服务器{}容器中定义。让我们将默认的vhost(in/etc/nginx/conf)修改如下:

nano /etc/nginx/conf.d/default.conf
[...]
server {
   listen       80;
   server_name  localhost;

   #charset koi8-r;
   #access_log  /var/log/nginx/log/host.access.log  main;

   location / {
       root   /usr/share/nginx/html;
       index  index.html index.htm index.php;
   }

   #error_page  404              /404.html;

   # redirect server error pages to the static page /50x.html
   #
   error_page   500 502 503 504  /50x.html;
   location = /50x.html {
       root   /usr/share/nginx/html;
   }

   # proxy the PHP scripts to Apache listening on 127.0.0.1:80
   #
   #location ~ \.php$ {
   #    proxy_pass   http://127.0.0.1;
   #}

   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
   #    location ~ \.php$ {
       root           /usr/share/nginx/html;
       try_files $uri =404;
       fastcgi_pass   127.0.0.1:9000;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       include        fastcgi_params;
   }

# deny access to .htaccess files, if Apache's document root
   # concurs with nginx's one
   #    location ~ /\.ht {
       deny  all;
   }}

在位置 /中,将index.php添加到索引行中。root/usr/share/nginx/html;意味着文档根目录是/usr/share/nginx/html。

PHP的重要部分是位置〜\ .php $ {}中的字节。 取消注释以启用它。 将根目录更改为网站的文档根目录(例如,根目录/ usr / share / nginx / html;)。 我们添加了try_files $ uri = 404行; 请确保将fastcgi_param行更改为fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; 否则,PHP解释程序将找不到您在浏览器中调用的PHP脚本($ document_root会转换为/ usr / share / nginx / html,因为这就是我们设置为文档根目录的内容)。

PHP-FPM默认在127.0.0.1上侦听端口9000,因此我们告诉Nginx使用fastcgi_pass 127.0.0.1:9000连接到127.0.0.1:9000;

现在保存文件并重新加载Nginx:

systemctl restart nginx.service

现在在root下 /usr/share/nginx/html中创建以下PHP文件.

nano /usr/share/nginx/html/info.php
<?php
phpinfo();
?>

现在,我们在浏览器中调用该文件(例如http://192.168.1.250/info.php):

The PHP info from our nginx server.

如您所见,PHP 5正在工作,它通过FPM/FastCGI工作,如ServerAPI行所示。如果进一步向下滚动,您将看到PHP 5中已经启用的所有模块,包括MySQL模块:

MySQL driver has been activated in PHP.

使PHP-FPM使用Unix Socket

默认情况下,PHP-FPM正在监听127.0.0.1上的端口9000。还可以使PHP-FPM使用Unix套接字,从而避免TCP开销。打开/etc/php-fpm.d/www.conf做如下修改:

nano /etc/php-fpm.d/www.conf
[...]
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php5-fpm.sock
[...]

新加载PHP-FPM:

systemctl restart php-fpm.service

接下来修改fastcgi_pass 127.0.0.1:9000为fastcgi_pass unix:/tmp/php5-fpm.sock;

vi /etc/nginx/conf.d/default.conf
[...]
   location ~ \.php$ {
       root           /usr/share/nginx/html;
       try_files $uri =404;
       fastcgi_pass   unix:/var/run/php-fpm/php5-fpm.sock;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       include        fastcgi_params;
   }
[...]

重新加载Nginx:

systemctl restart nginx.service

完结撒花!!!

感谢您访问李梦园个人博客-静水流深

版权声明:本文由静水流深发布,如需转载请注明出处。

分享给朋友:

相关文章

新手搭建网站(个人博客),从云主机,域名到模板部署

新手搭建网站(个人博客),从云主机,域名到模板部署

对于新手搭建网站网上也有不少的教程,我这里也记录下自己搭建个人博客的过程,留给其他小伙伴做个经验分享.我的个人博客地址:Https://www.lmyblog.com(李梦园个人博客---静水流深)搭...

通过简单的方法在Apache Tomcat上配置SSL证书

通过简单的方法在Apache Tomcat上配置SSL证书

欢迎访问李梦园个人博客---静水流深基本要求JAVA SDK / JDKTomcat(7+)三个步骤使用Java创建密钥库文件配置Tomcat以使用密钥库配置您的应用程序以使用SSL(通过https:...

如何在CentOS 7.3的LAMP上安装CMS Made Simple v2.2

如何在CentOS 7.3的LAMP上安装CMS Made Simple v2.2

  CMS Made Simple是一个开源的免费内容管理系统(CMS)。它是对用户友好的,高度可扩展的,易于集成,易于设计,功能强大的插件。在CMS Made Simple中,您...

百度网址收录网址提交网站提交SEO工具

百度网址收录网址提交网站提交SEO工具

李梦园个人博客-静水流深收录百度网站网址收录提交、独立博客网站网址提交收录、 英文搜索网站网址提交收录、搜索引擎网站网址提交收录、网站站长SEO工具、网站网址sitemap提交,网站被K申述等超适用的...

在CentOS 7上安装ApacheWeb服务器

在CentOS 7上安装ApacheWeb服务器

Apache HTTP效劳器是世界上运用最普遍的Web效劳器。它提供了许多弱小的功用,包括静态加载的模块,弱小的媒体支持,并与其他盛行软件普遍集成。在本文中,你将在你的CentOS 7服务器(虚拟机)...