记录:使用linux centos7 部署 php 网站

系统环境:
linux centos7
运行环境:
nginx 服务
php 服务
php网站源码

背景:
有朋友做了一个php网站,但是不知道如何部署到linux 服务上,并通www.***.com 以域名的方式访问该php网站。

首先需要 拿到php网站源码,以及该域名对应的 liunx 服务器ip,用户名和密码, 测试 使用ssh 连接 liunx服务器,没有问题后就可以开始部署流程。

在浏览器访问 www.***.com 域名,发现不能访问,预测可能是 linux 服务器没有开启80端口,没有启动nginx服务。

使用端口在线扫描工具(百度搜索就能找到),扫描结果确定,只开启了22端口,没有开启 80 端口。

注意:如果只是防火墙开启了80端口,但linux 服务器没有启动nginx服务(默认监听80端口),这样情况下使用端口扫描工具扫描,80端口还是会显示没有开启。

注意:部署前一定要问开发php网站的人,用的php服务是什么版本,不然就可能会像我一样,安装了php 7 版本,但根本运行不了他们的代码(php7 和php5代码不兼容),又得重新安装php 5 版本。

部署流程

以前有用过nginx、tomcat服务器部署过前端项目,所以参考以前的经验,打算使用以下步骤部署网站:
1 启动nginx服务
2 启动php服务
3 通过nginx服务配置代理转发请求到php服务

在部署过程中却遇到了问题,导致该问题的原因是对php服务理解有误。
这里php服务 不同于 apache 、nginx服务。我原以为php服务应该和apache服务一样,有项目根路径,只需要将php网站源码放置到php服务的根路径下,php项目会自动启动运行。
但事实是这里的php服务只是一个解析器,解析器将php代码进行解析执行。导致我一直在google php服务的根路径在哪,如何配置php服务项目的启动路径,搜索了半天没有答案才想到,这个php会不会不是个“服务”。
也怪自己对php不熟。
以上的步骤是没有问题的,就是nginx配置细节有点不同。

访问php文件的原理是,nginx 服务读取php文件,然后通过php服务器将文件内容并进行解析,解析完成后通过nginx服务器再返回到前端浏览器。所以 php 服务并没有类似 tomcat、nginx服务,有静态资源访问服务。所以php没有静态资源服务,找不到静态文件根路径。

linux centos服务器防火墙配置,开启80端口

注意:firewalld 可能默认没有开启
注意:每次修改完防火墙配置后都需要重新启动才能生效
注意:防火墙开启了80端口,需要再启动nginx 服务,端口扫描工具才能扫描出来80端口已经打开
参考:CentOS 开启http 端口(80)
参考:centos7 开启80端口
参考:firewalld 与 iptables
参考:细说firewalld和iptables

安装并启动nginx

参考:CentOS 7 下 yum 安装和配置 Nginx
安装并启动成功后, 使用浏览器访问ip或者域名,如果有显示nginx 启动成功页面, 说明nginx 启动成功,并且80端口已经启动成功。
如果还是显示不能访问该地址,则需要去验证下 nginx 是否启动成功和 80端口是否开启成功。

安装并启动php服务

参考:CentOS下,yum安装php
安装完成后,验证下9000端口是否已经启动,php服务默认启动9000端口。
注意:选择安装版本前,需要向确认php网站源码支持什么版本的php服务,不然会出现代码和php服务不兼容的情况。

nginx.config 配置php解析

直接把~.php$ 这一段注释打开,并修改这一行

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
server {
    listen       80;
    server_name  www.***.com;

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

    location / {
        root   /usr/share/nginx/html;
        index  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;
       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;
    #}
}

结束

将php网站代码放置到 /usr/share/nginx/html 路径,默认访问该文件夹下index.php文件。

总结

使用linux一般都是没有界面,所以遇到问题时千万不要慌,慢慢来,想想原理是什么,出现这个问题应该是什么原因,然后从这些疑惑入手,一个一个去验证错误。

多使用 history 命令,查看下操作历史,往往从这些历史操作中,就能发现有哪些是哪些操作导致的错误。

多使用搜索工具,百度,google ,bing 都是可以的,当搜索不到问题的答案时,或者搜索到的问题答案很少时,这时候就需要注意了,需要考虑下这个问题是不是很少出现,或者根本不会出现的问题,或者是很基础的问题,或者是完全是找错了方向。例如这次的部署中,我一直在搜索,php服务的项目启动根目录的位置在哪?发现问题的答案很少,要么就一些答非所问的回答。

多查看日志文件,当不能访问时,首先需要去查看nginx 的日志文件,看看每次访问错误是否有错误日志,而错误日志又是什么。还有php服务日志文件,这些文件就记录错误信息。

整个项目部署下来,能访问php文件的原理是,nginx 服务读取php文件,然后通过php服务器读取php文件的内容并进行解析,解析完成后通过nginx服务器在返回到前端浏览器。在这个过程中,php服务需要有访问该项目下php文件的权限,不然会有提示找不到文件提示.FastCGI sent in stderr: "Primary script unknown" , File not found.

你可能感兴趣的:(记录:使用linux centos7 部署 php 网站)