docker启动nginx php项目报错或异常解决

392 阅读2分钟

操作系统:

依旧是Linux

本地启动正常,通过curl 地址 命令查看php,nginx日志等都可以正常返回页面,但外部无法访问,浏览器提示XXXX拒绝了您的请求

解决: 先检查本地端口有没有开启

443是https默认端口 80是http默认端口

# 查询指定端口号状态
sudo firewall -cmd --query-port=443/tcp
sudo firewall -cmd --query-port=80/tcp

# 返回yes是开启no是没有开启,如果返回no执行就先开启端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent

如果都返回yes,你可以在外部通过telnet来测试你的服务器端口是否正常

telnet 你的域名/ip  端口号
# 例如    telnet  www.abc.com  443

如果返回连接不成功,那你就要考虑你的请求是不是被网关拦截了,我的就是这种情况,最后咨询运营商说80/443端口需要单独备案

docker启动php项目正常,访问伪静态文件文件报错

解决:nginx php项目访问端口配置文件中加入

location / {
    if (!-e $request_filename) {
      rewrite ^(.*) /index.php last;
    }
}

项目上传文件报错无权限

解决:php项目加入读写权限

chmod -R 777  项目文件夹名称

登录成功无法跳转到入口页面,原因登录名密码没有写到session中,导致校验失败跳回登陆页面

解决:

第一步:复制php.development.ini到宿主机目录

docker cp   你的php容器名称:/usr/local/etc/php/php.development.ini    php.development.ini

ps:在这之前可以通过如下命令进入容器目录验证ini文件在哪

sudo docker exec -it 你的php容器名称 /bin/bash

第二步:修改宿主机的php.development.ini,并重命名为php.ini,vim进入编辑修改如下配置

a)设置时区 似乎跟报错没什么关系但是一起改了

date.timezone = Asia/Shanghai

b)设置session保存路径

session.save_path = "/tmp"

第三步:保存,将当前文件复制到docker容器目录

docker cp   php.ini   你的php容器名:/usr/local/etc/php/php.ini

然后重启

docker restart 你的php容器名

打开php某页面报错

To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in

这个报错提示很明确了,解决方法就是ini的配置 'always_populate_raw_post_data' to '-1'取消注释

装了物理防火墙之后伪静态文件打不开

伪静态文件打开头为http,物理防火墙没有对80端口进行映射

👉 以上内容仅供参考,请谨慎操作。