nginx报错file not found解决

文章目录

  • 一、nginx配置文件修改
    • 1.1 配置文件位置
    • 1.2 php fastcgi配置
    • 1.3 测试
  • 二、nginx+php运行原理
  • 三、外网访问内网设置

采用nginx+php作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单,是需要动态执行php脚本。所以涉及到了对nginx.conf文件的配置。

当我在搭建wordpress时,需要搭建一个lnmp环境时,nginx报错:file not found 以及其它错误,我发现,是我的nginx配置错误。

那么本文的主要内容就为大家讲解如何在nginx server中正确配置php调用方法,以及配置的基本原理。

一、nginx配置文件修改

1.1 配置文件位置

Nginx的配置文件默认位置为:/etc/nginx/nginx.conf

在我的环境中 nginx.conf 在 /etc/nginx/nginx.conf

配置文件分析

# nginx运行的用户名
user nginx;
# nginx启动进程,通常设置成和cpu的数量相等,这里为自动
worker_processes auto;# errorlog文件位置
error_log /var/log/nginx/error.log;
# pid文件地址,记录了nginx的pid,方便进程管理
pid /run/nginx.pid;# Load dynamic modules. See /usr/share/nginx/README.dynamic.
# 用来加载其他动态模块的配置
include /usr/share/nginx/modules/*.conf;# 工作模式和连接数上限
events {# 每个worker_processes的最大并发链接数# 并发总数:worker_processes*worker_connectionsworker_connections 1024;
}# 与提供http服务相关的一些配置参数类似的还有mail
http {# 设置日志的格式log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# access_log记录访问的用户、页面、浏览器、ip和其他的访问信息access_log  /var/log/nginx/access.log  main;# 这部分下面会单独解释# 设置nginx是否使用sendfile函数输出文件sendfile            on;# 数据包最大时发包(使用Nagle算法)tcp_nopush          on;# 立刻发送数据包(禁用Nagle算法)tcp_nodelay         on;# 链接超时时间keepalive_timeout   65;# 这个我也不清楚...types_hash_max_size 2048;# 引入文件扩展名与文件类型映射表include             /etc/nginx/mime.types;# 默认文件类型default_type        application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;# http服务上支持若干虚拟主机。# 每个虚拟主机一个对应的server配置项# 配置项里面包含该虚拟主机相关的配置。server {# 端口listen       80 default_server;listen       [::]:80 default_server;# 访问的域名server_name  _;# 默认网站根目录(www目录)root         /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;# 默认请求location / {}# 错误页(404)error_page 404 /404.html;location = /40x.html {}# 错误页(50X)error_page 500 502 503 504 /50x.html;location = /50x.html {}}
}

要点说明

  • 1、关于error_log

可以设置log的类型(记录什么级别的信息)有:debug、info、notice、warn、error、crit几种

  • 2、关于sendfile

一般的网络传输过程
硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈
使用sendfile后
硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈
可以显著提高传输性能。

  • 3、tcp_nopush和tcp_nodelay

tcp_nopush只有在启用了sendfile时才起作用,
在启用tcp_nopush后,程序接收到了数据包后不会马上发出,而是等待数据包最大时一次性发出,可以缓解网络拥堵。(Nagle化)
相反tcp_nodelay则是立即发出数据包.

1.2 php fastcgi配置

分析完了配置文件后开始配置环境。

因为只是配置PHP的服务器,而且只使用一个端口所以只需要改动server部分

在vim中点击‘i’进入编辑模式

server {listen       80 default_server;listen       [::]:80 default_server;# 这里改动了,也可以写你的域名server_name  127.0.0.1;# 默认网站根目录(www目录)root         /var/www/;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {# 这里改动了 定义首页索引文件的名称index index.php index.html index.htm;}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}# 这里新加的# PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.# Fastcgi服务器和程序(PHP,Python)沟通的协议.location ~ \.php$ {# 设置监听端口fastcgi_pass   127.0.0.1:9000;# 设置nginx的默认首页文件(上面已经设置过了,可以删除)fastcgi_index  index.php;# 设置脚本文件请求的路径fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;# 引入fastcgi的配置文件include        fastcgi_params;}}

修改完成后将vim编辑器切换到一般一半模式(Esc),然后输入:wq保存退出。

之后重启Nginx服务

service nginx restart

以上就配置成功了,但是上面的配置只是nginx配置部分,更多的内容需要继续学习。

1.3 测试

我们可以通过下面的方法判断Nginx配置是否成功。

在Nginx的网站根目录(/var/www/)下创建一个php文件,随便起名我的是php_info.php

内容如下:

<?php// 顺便可以看一下php的扩展全不全phpinfo();

进入你的网站看看能不能打开文件
你的ip/文件名 例如:127.0.0.1/php_info.php

二、nginx+php运行原理

上边我们已经配置成功了,现在我们来看下具体的原理。

首先简单的讲一讲原理,目前主流的nginx+php的运行原理如下:

  • 1、nginx的worker进程直接管理每一个请求到nginx的网络请求。

  • 2、对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。

  • 3、关于fastcgi:fastcgi是一种进程管理器,管理cgi进程。市面上有多种实现了fastcgi功能的进程管理器,php-fpm就是其中的一种。再提一点,php-fpm作为一种fast-cgi进程管理服务,会监听端口,一般默认监听9000端口,并且是监听本机,也就是只接收来自本机的端口请求,所以我们通常输入命令 netstat -nlpt|grep php-fpm 会得到:
    tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1057/php-fpm
    这里的127.0.0.1:9000 就是监听本机9000端口的意思。

  • 4、关于fastcgi的配置文件,目前fastcgi的配置文件一般放在nginx.conf同级目录下,配置文件形式,一般有两种:fastcgi.conf 和 fastcgi_params。不同的nginx版本会有不同的配置文件,这两个配置文件有一个非常重要的区别:fastcgi_parames文件中缺少下列配置:
    fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t document_root documentrootfastcgi_script_name;
    我们可以打开fastcgi_parames文件加上上述行,也可以在要使用配置的地方动态添加。使得该配置生效。

  • 5、当需要处理php请求时,nginx的worker进程会将请求移交给php-fpm的worker进程进行处理,也就是最开头所说的nginx调用了php,其实严格得讲是nginx间接调用php。

了解了上面的这五个简单原理,在nginx中配置php调用方法就变得易如反掌。

配置文件详解:

server {  listen       8011;  server_name  test.cn;  location ~ \.php?.*$ {  root           /share/test;  fastcgi_pass   127.0.0.1:9000;  fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  include        fastcgi_params;  }  
}  
  • 1、第一个大括号 server{ }:不必多说,代表一个独立的server,
  • 2、listen 8011:代表该server监听8011端口
  • 3、location ~ .php?.*${ }:代表一个能匹配对应uri的location,用于匹配一类uri,并对所匹配的uri请求做自定义的逻辑、配置。这里的location,匹配了所有带.php的uri请求,例如:http://192.168.244.128:8011/test.php/asdasd http://192.168.244.128:8011/index.php等
  • 4、root /share/test:请求资源根目录,告诉匹配到该location下的uri到/share/teset文件夹下去寻找同名资源。
  • 5、fastcgi_pass 127.0.0.1:9000:这行开始是本文的重点:这行代码的意思是,将进入到该location内的uri请求看做是cgi程序,并将请求发送到9000端口,交由php-fpm处理。
  • 6、fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t document_root documentrootfastcgi_script_name; :这行配置意思是:动态添加了一行fastcgi配置,配置内容为SCRIPT_FILENAME,告知管理进程,cgi脚本名称。由于我的nginx中只有fastcgi_params文件,没有fastcgi.conf文件,所以要使php-fpm知道SCRIPT_FILENAME的具体值,就必须要动态的添加这行配置。
  • 7、include fastcgi_params; 引入fastcgi配置文件
    以上就是最简洁版的nginx启动php脚本的最简配置,当重启nginx之后,在/share/test目录下创建一个xx.php文件,输入<?php echo "hello world"; ?>保存,然后在浏览器中访问localhost:8011/xx.php 就可以在网页上显示hello world了。

三、外网访问内网设置

外网IP:http://58.62.21.107:8382 映射内网服务器IP 192.168.17.56 的 82 端口,即:192.168.17.56:82,需要在nginx.conf 配置文件中开放 82 端口给 外网访问,即下面的配置:

[root@ceshi www]# cat /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;events {worker_connections 1024;
}http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 2048;include             /etc/nginx/mime.types;default_type        application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;server {listen       82 default_server;   # 服务器端口,和外网映射的需保持一致listen       [::]:82 default_server; # 服务器端口,和外网映射的需保持一致server_name  192.168.17.56;root         /data/www/;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}# PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.# Fastcgi服务器和程序(PHP,Python)沟通的协议.location ~ \.php$ {# 设置监听端口fastcgi_pass   127.0.0.1:9000;# 设置nginx的默认首页文件(上面已经设置过了,可以删除)fastcgi_index  index.php;# 设置脚本文件请求的路径fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;# 引入fastcgi的配置文件include        fastcgi_params;}}# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考高级系统架构设计师系列案例考点专题五:Web应用开发

软考高级系统架构设计师系列案例考点专题五:Web应用开发 一、Web应用技术分类二、数据库与Web服务器三、应用服务器集群四、负载均衡技术1.应用层负载均衡技术2.传输层负载均衡技术五、数据库读写分离化六、用缓存缓解库读取压力七、有状态和无状态八、内容分发网络九、表述性…

手敲Cocos简易地图编辑器:人生地图是一本不断修改的书,每一次编辑都是为了克服新的阻挡

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》&#xff0c;欢迎大家关注分享收藏订阅。 在上一篇文章&#xff0c;笔者给大家讲解了在Cocos独立游戏开发框架中&#xff0c;如何自定义实现Tile地图管理器&#xff0c;成功地在游戏中优化加载一张特大的地图。接下来…

springboot~静态资源配置

springboot~静态资源配置 springboot的静态资源默认路径给静态资源请求加前缀指定静态资源加载的包欢迎页 springboot的静态资源默认路径 请求效果见图 给静态资源请求加前缀 有时需要用拦截器对某些请求进行拦截后再处理相关的业务代码&#xff0c;此时我们就要对请求进行…

腾讯云PK阿里云2核2G云服务器租用价格表

2核2G云服务器可以选择阿里云服务器或腾讯云服务器&#xff0c;腾讯云轻量2核2G3M带宽服务器95元一年&#xff0c;阿里云轻量2核2G3M带宽优惠价108元一年&#xff0c;不只是轻量应用服务器&#xff0c;阿里云还可以选择ECS云服务器u1&#xff0c;腾讯云也可以选择CVM标准型S5云…

linux vim用法

vim 查找关键字 /关键字 &#xff0c;回车即可。此为从文档当前位置向下查找关键字&#xff0c;按n键查找关键字下一个位置&#xff1b; ?关键字&#xff0c;回车即可。此为从文档当前位置向上查找关键字&#xff0c;按n键向上查找关键字&#xff1b; vim跳转 gg 跳转到第一…

C++中std::enable_if和SFINAE介绍

作为一个标准的C++模板类,我们先看下enable_if的定义: // STRUCT TEMPLATE enable_if template <bool _Test, class _Ty = void> struct enable_if {}; // no member "type" when !_Testtemplate <class _Ty> struct enable_if<true, _Ty> { //…

ICIF2023化工展首亮相,宏工科技解决方案助力制造升级

ICIF China 2023中国国际化工展览会于9月4日-6日在上海新国际博览中心举办。宏工科技携化工物料处理一站式解决方案首次亮相&#xff0c;同化工行业全产业链共叙物料处理自动化未来。 宏工科技是一家提供物料处理自动化设备、系统与服务的国家级高新技术企业&#xff0c;业务覆…

TCP/IP UDP广播无法发送或接收

TCP/IP UDP广播无法发送或者接收数据 在看《TCP/IP 网络编程》这本书的时候&#xff0c;看到广播那一节&#xff0c;跟着书上写代码&#xff0c;怎么写都不行&#xff0c;广播就是没法发送/接收&#xff0c;发送端一直在发送数据&#xff0c;接收端就是没有反应。 对了好几遍…

uniapp 微信小程序最新隐私弹窗更新方案,更新后无法登录问题解决方案

1&#xff0c;在manifest.json文件中的mp-weixin 节点下&#xff0c;添加&#xff1a;"__usePrivacyCheck__": true 2&#xff0c;在需要的页面配置隐私保护弹窗&#xff0c;或者直接写到首页也可以 <uni-popup ref"popusAuthorization" type"cen…

overleaf 参考文献引用,创建引用目录.bib文件,在文档中引用参考文献,生成参考文献列表

目录 1 创建一个Overleaf项目 2 导入或创建 .bib 文件 2.1 导入 .bib 文件&#xff1a; 参考文献的 .bib文件获取步骤 &#xff08;1&#xff09;打开谷歌学术 &#xff08;2&#xff09;输入文献题目 &#xff08;3&#xff09;点击引用&#xff0c;然后选择BibTex格式…

230908-MetaGPT构建专属AI Agent的技术实践-视频笔记

LangChain >>> 概念过载MetaGPT&#xff1a;通过AI&#xff0c;完成GPT的自举原编程应该是一个函数&#xff0c;而不是人去做3月到5月&#xff1a;目前业界所有开源工程及对应论文60&#xff0c;写了54篇对应笔记LangChain >>> 9万6000行代码&#xff0c;655…

opencv基础: 视频,摄像头读取与保存的常用方法

当然还可以从视频中抓取截图&#xff0c;所以现在聊一下常用的抓取视频截图的的方法。 VideoCapture 方法 cv2.VideoCapture();cv2.VideoCapture( device);cv2.VideoCapture(filename);上面有三种构造方法&#xff0c; 第一种是无法构造方法。 第二种参数device是一个数字。 …

SpringBoot+jSerialComm实现Java串口通信 读取串口数据以及发送数据

记录一下使用SpringBootjSerialComm实现Java串口通信&#xff0c;使用Java语言开发串口&#xff0c;对串口进行读写操作,在win和linux系统都是可以的&#xff0c;有一点好处是不需要导入额外的文件。 案例demo源码&#xff1a;SpringBootjSerialComm实现Java串口通信 读取串口…

文盘Rust——子命令提示,提高用户体验 | 京东云技术团队

上次我们聊到 CLI 的领域交互模式。在领域交互模式中&#xff0c;可能存在多层次的子命令。在使用过程中如果全评记忆的话&#xff0c;命令少还好&#xff0c;多了真心记不住。频繁 --help 也是个很麻烦的事情。如果每次按 ‘tab’ 键就可以提示或补齐命令是不是很方便呢。这一…

【已更新代码图表】2023数学建模国赛E题python代码--黄河水沙监测数据分析

E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c;以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位于小浪底水…

【算法题】小红书2023秋招提前批算法真题解析

文章目录 题目来源T1&#xff1a;5900: 【DP】小红书2023秋招提前批-连续子数组最大和5801: 【二分查找】小红书2023秋招提前批-精华帖子解法1——排序滑动窗口解法2——前缀和 二分查找 5000: 【模拟】小红书2023秋招提前批-小红的数组构造解法——数学 5300: 【哈希表】小红…

Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon

Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon 目前主流的负载均衡方案有两种,一种是集中式均衡负载,在消费者与服务提供者之间使用独立的代理方式进行负载,比如F5、Nginx等。另一种则是客户端自己做负载均衡,根据自己的请求做负载,Ribbon就属于客户端自…

(高阶)Redis 7 第10讲 单线程 与 多线程 入门篇

面试题 1.Redis 是单线程还是多线程 最早的版本3.x是单线程。 版本4.x,严格意义不是单线程。负责处理客户端请求的线程是单线程,开始加入异步删除。 6.0.x版本后明确使用全新的多线程来解决问题 2.说说IO多路复用3.Redis 为什么快IO多路复用+epoll函…

stm32f103zet6移植标准库的sdio驱动

sdio移植 st官网给的标准库有给一个用于st出的评估板的sdio外设实现&#xff0c;但一是文件结构有点复杂&#xff0c;二是相比于国内正点原子和野火的板子也有点不同&#xff0c;因此还是需要移植下才能使用。当然也可以直接使用正点原子或野火提供的实例&#xff0c;但为了熟…

高频golang面试题:简单聊聊内存逃逸?

文章目录 问题怎么答举例 问题 知道golang的内存逃逸吗&#xff1f;什么情况下会发生内存逃逸&#xff1f; 怎么答 golang程序变量会携带有一组校验数据&#xff0c;用来证明它的整个生命周期是否在运行时完全可知。如果变量通过了这些校验&#xff0c;它就可以在栈上分配。…