系统环境:
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
参考:CentOS 6.9 下 yum 安装和配置 Nginx
参考: unbutu 安装nginx
安装并启动成功后, 使用浏览器访问ip或者域名,如果有显示nginx 启动成功页面, 说明nginx 启动成功,并且80端口已经启动成功。
如果还是显示不能访问该地址,则需要去验证下 nginx 是否启动成功和 80端口是否开启成功。
安装并启动php服务
参考:CentOS下,yum安装php
参考:ubutu 安装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.
网友评论