【Nginx04】Nginx学习:HTTP核心模块(一)简单搭建

这篇具有很好参考价值的文章主要介绍了【Nginx04】Nginx学习:HTTP核心模块(一)简单搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Nginx学习:HTTP核心模块(一)简单搭建

前面就说过了,HTTP 模块是整个 Nginx 中最核心的模块。在这其中,它又有一部分最核心的模块,其实也就是在编译安装的时候,我们不装任何扩展就自带的模块。这一部分模块就像是基本的 PHP 语法一样,是最基础的,也是我们最需要重点掌握的内容。

今天先入个门,搭起简单的一套 Web 服务,让 Nginx 可用就行了。内容不复杂,但如果是初学者,那一定要跟着动手练练哦。即使是做了几年的老油条了,如果你对 Nginx 也仅限于 宝塔 之类的面板配置的话,那也最好一起动手玩玩哦。

HTTP模块

在 Nginx 中,除了核心模块之外,其它模块之间的划分就是通过命令标识与一对花括号来体现的,我们上回学习到的事件模块就是在 events 中进行配置。其实很像我们在编程语言中的作用域的感觉。比如在 HTTP 模块中,所有的配置指令都是在下面这个 http 指令模块中。

http { ... }

它就是为HTTP服务器提供配置上下文的,后续我们要学习的所有和 HTTP 相关的配置指令都是在这个 http 下面进行配置的。也就是说,马上要学习的内容,基本全是在这个 http 内部的配置指令。

今天是第一篇,所以咱们还是先搭起来一个简单的服务器。

简单搭建起来一个服务器

只需要写下下面这些配置,就可以运行起来一个标准的 Web HTTP 静态服务器了。

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

这个配置其实就是我通过 cat nginx.conf.default | grep -Ev '^$|#' 去除掉 nginx.conf.default 这自带的默认配置文件的注释和空格所得到的结果。我们可以把这部分内容保存到另一个文件中,比如我就起名为 nginx.conf-first.conf 。

接下来,关闭正在运行的 Nginx ,还记得之前命令行学过的内容吧。

nginx -s quit

然后使用我们这个新的配置文件来启动。

nginx -c /etc/nginx/nginx.conf-first.conf

为啥不直接用自带的原始的那个 nginx.conf 文件呢?其实如果是刚装好的 Nginx ,那么 nginx.conf 文件和上面的配置内容是一模一样的,只是有注释而已。用默认的 nginx.conf 文件也可以,但是在写文章的时候我对那个默认的配置文件已经做了很多更改,所以暂时我不想动它。正好也顺便复习一下之前学习的命令行相关的内容嘛。同时也证明一下,启动 nginx 的时候,具体使用哪个配置文件是我们可以自己指定的,就像 Reids 那些一样。

好了,现在我们使用的就是这个新的配置文件了。大家可以访问一下试试。

基本模块

在 http 中,最基础的就是 server 模块,它代表一个虚拟主机,下篇文章我们就来重点介绍它。在 http 中,一定要有一个虚拟主机,要不就不知道访问谁了。

另一个就是 location 模块,它其实是在 server 之下的,用于指定路径的访问。一般最少都会有一个 location / 的配置,这一部分内容我们将在下下篇文章学习,也就是讲完 Server 之后。

这两块是 Http 模块中最重要的两部分内容。

return 指令

这个指令是属于重写 Rewrite 模块的,不在 HTTP 的核心模块中,未来我们学习到相关的模块时才会详细的学习,这里先只是简单的介绍一下,因为它对于我们的调试非常有用。

………………
location / {
  root   html;
  index  index.html index.htm;
}
location /t1 {
 return 201 'return test!';
}
………………

在 location / 后面添加一个访问路径 /t1,在这个路径里面我们就使用了 return 指令。这个指令的参数可以指定一个 HTTP 状态码,后面可以可选地返回一个文本内容或 URL 链接。对于调试来说,我们可能会更多地使用文本内容。

现在大家需要重载服务配置,这回可不能直接就 nginx -s reload 了,需要把配置文件参数也带上 nginx -c /etc/nginx/nginx.conf-first.conf -s reload 。不带会怎样?大家自己试试呗。然后就可以访问上面配置的链接,看看状态码是不是 201 ,响应体输出的内容是不是 return test! 。

连接 PHP

这个连接 PHP 的配置,对于我们大部分 PHPer 来说应该非常熟悉了。但对于使用其它语言的,可能会用得比较少。其实这套配置在默认的 nginx.conf.default 和 nginx.conf 中已经给出了。我们复制过来就好。

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
}

这个 location 使用了正则,后面学习的时候再详细说,意思就是所有以 .php 结尾的文件,走这个 location 。在这里,我们需要先修改一个地方,就是 fastcgi_pass ,表示连接 PHP-FPM 的方式。之前在 了解PHP-FPMhttps://mp.weixin.qq.com/s/NUpDnfYfbPuWmal4Am3lsg 这篇文章中我们就已经介绍过了 UnixSocket 和 TCP 两种连接方式的区别。因此,要根据你在当前服务器上安装的 PHP-FPM 的配置来进行配置。比如我这里使用的就是 UnixSocket 方式,sock 文件在 /var/sock/php-fpm/www.sock 。因此,最终的配置就是修改一下这里。

location ~ \.php$ {
    …………
    fastcgi_pass   unix:/var/sock/php-fpm/www.sock;
    …………
}

接下来,在程序安装目录的 html 目录下新建一个 script 目录(我这里是 /usr/local/nginx/html ),里面放一个 1.php 文件,文件内容就简单地打印一个 $_SERVER 的内容好了。

<?php
print_r($_SERVER);

现在访问一下 /1.php ,不对呀,File not found. 错误出现了。这是啥情况?其实呀,还有一个地方被我们忽略了,那就是 fastcgi_param SCRIPT_FILENAME 这一行,默认它是 /scripts/$fastcgi_script_name。表示的是 FastCGI的脚本目录是 /scripts 目录下的文件,$fastcgi_script_name 是一个 Nginx 变量,表示的是具体的脚本名称,也就是 1.php 。合起来的话,就是让 FastCGI 去执行 /srcipts/1.php 这个文件。很明显,这个文件不存在呀,我们创建的文件路径应该是 /usr/local/nginx/html/scripts/1.php 嘛。

这里的修改其实很简单,再加一个变量 $document_root ,它会获得 root 配置所指定的目录的绝对路径,即使我们在上面的配置中指定的 root 是一个相对路径,它也会返回完整的 /usr/local/nginx/ 目录。好了,修改一下这里。

location ~ \.php$ {
    …………
    fastcgi_param  SCRIPT_FILENAME  $document_root/scripts$fastcgi_script_name;
    …………
}

现在重载配置之后再访问一下,看看是不是正常显示 PHP 输出的内容了。

目录权限问题

前面的测试,不管添加的文件,还是 html 这个目录,权限全是 root 用户的,并且文件权限也只有 644 。但是大家在日常使用时,更喜欢将 Nginx 的项目根目录设置为 www 或者 nginx 之类的用户,也就是跟我们在 Nginx 设置的 user 配置中使用相同的用户。其实这么做是对的,但是,并不是说一定要这个指定的用户才能运行。Nginx 运行静态或者动态文件,只需要所有父目录为755权限,文件为 644 权限就可以了。或者换句话说,只要有 r 这个读权限就可以。但是,这种权限如果都是 root 用户的话,那么 www 之类的用户就没法写入,而且目录用户给的确实太大。做为标准开发的话,通常还是会改成 www 之类的标准用户。

当然,这个用户名不是完全一定要用 www 之类的,你完全可以指定自己喜欢的用户名,不过需要注意的是要设置成 nologin 的,而且 Nginx 和 PHP-FPM 都要配置成一样的。这样才能避免因为权限而产生的各种问题。

总结

比较简单吧?非常入门。但是对于纯入门的新手来说可能也会比较懵圈,另外我也没讲过 Nginx 的安装,这一部分的内容大家可以在网上搜搜,不管是视频还是文章,简直不要太多了。推荐的还是手动编译安装一下,将来学完了日常在工作中不管是 yum 还是面板工具之类的都没问题。但是打基础阶段还是用笨方法吧。

好了,接下来就进入到我们第一个非常核心的部分,那就是 Server 模块的学习。文章来源地址https://www.toymoban.com/news/detail-521076.html

到了这里,关于【Nginx04】Nginx学习:HTTP核心模块(一)简单搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Nginx15】Nginx学习:HTTP核心模块(十二)内嵌变量

    关于内嵌变量,其实就是 Nginx 开放给我们的在配置文件中可以使用的变量。源码中无非就是替换成真实的代码变量进行操作。这些变量可以帮助我们做很多事情。之前的文章中其实也有不少地方用到了,比如说  $uri  这个变量,是不是已经见过很多次了。而且这些变量基本

    2024年02月14日
    浏览(41)
  • 【Nginx08】Nginx学习:HTTP核心模块(五)长连接与连接处理

    HTTP 基础知识大家掌握的怎么样呀?对于长连接这一块的内容应该也不是什么新鲜东西了吧。毕竟 HTTP1.1 都已经发布这么久了。今天主要来看的就是长连接相关的配置,另外还会介绍几个和连接有关的内容。同时,今天的内容除了 HTTP 外,还需要一点 TCP 的知识。没办法,毕竟

    2024年02月16日
    浏览(44)
  • 【Nginx13】Nginx学习:HTTP核心模块(十)Types、AIO及其它配置

    今天学习的内容也比较简单,主要的是 Types 相关的配置,另外还会了解一下 AIO 以及部分没有特别大的分类归属的配置指令的使用。后面的内容都是 HTTP 核心模块中比较小或者比较简单的部分了。有很多配置项其实我们平常并不常用,甚至很多在学习之前我都不知道有它们的

    2024年02月12日
    浏览(50)
  • 【Nginx12】Nginx学习:HTTP核心模块(九)浏览器缓存与try_files

    浏览器缓存在 Nginx 的 HTTP 核心模块中其实只有两个简单的配置,这一块也是 HTTP 的基础知识。之前我们就一直在强调,学习 Nginx 需要的就是各种网络相关的基础知识,其中更重要的就是 HTTP 和 TCP 相关的内容。另外一个 try_files 配置指令也是 Nginx 中非常常用的一个指令,用于

    2024年02月15日
    浏览(37)
  • nginx http模块

    location的定义包含以下几种 =:表示精确匹配,只有请求的url路径与后面的字符串完全相等时,才会命中,不支持location嵌套 ~:表示使用正则定义的,区分大小写 ~*:表示是使用正则定义的,不区分大小写 ^~:表示该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查

    2023年04月08日
    浏览(39)
  • Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器

    #!/bin/sh HTTP_FLV_MODULE_PATH=…/nginx-http-flv-module-1.2.7 OpenSSL_PATH=…/openssl-1.1.1d #–prefix=./bin 代表编译完成之后输出的路径地址 #–add-module 将拓展模块添加到当前一起编译 ./configure --prefix=./bin –add-module= H T T P F L V M O D U L E P A T H   − − w i t h − o p e n s s l = HTTP_FLV_MODULE_PATH --with

    2024年04月15日
    浏览(63)
  • Nginx安装http2和ssl模块

    Nginx在执行默认安装命令的时候,并不会编译启用ngx_http_v2_module模块。故在修改Nginx配置文件启用http2.0协议的时候会报错。 一.检查Nginx安装了哪些模块 如图就是没有安装ngx_http_v2_module模块 二.重新编译Nginx Nginx有两个目录,一个是安装目录,一个是源码目录,安装目录就是执

    2024年01月16日
    浏览(41)
  • 使用nginx搭建http和https环境

    目录 一、nginx 1.1什么是负载均衡 1.2什么是反向代理 二、安装nginx,并对nginx进行基础配置 三、为什么搭建http和https环境 四、配置http和https环境 五、配置成功后对nginx进行检查和运行 六、测试 Nginx is an open-source web server software that can also be used as a reverse proxy, load balancer, and H

    2024年02月08日
    浏览(43)
  • Nginx ngx_http_auth_request_module模块鉴权

    ngx_http_auth_request_module 模块 实现了基于一子请求的结果的客户端的授权。如果子请求返回2xx响应码,则允许访问。如果它返回401或403,则访问被拒绝并显示相应的错误代码。子请求返回的任何其他响应代码都被认为是错误的。 auth_request 使用的也是 subrequest 进行子请求。 当我

    2024年02月17日
    浏览(57)
  • Nginx + RTMP + nginx-http-flv-module 环境搭建(CentOS 7)

    🎉Nginx + RTMP + nginx-http-flv-module 环境搭建(CentOS 7) ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:Java学习路线 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果文中出现

    2024年02月05日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包