>백엔드 개발 >PHP 튜토리얼 >Nginx를 사용하여 정적 페이지를 배포하는 방법

Nginx를 사용하여 정적 페이지를 배포하는 방법

不言
不言원래의
2018-06-04 10:40:124199검색

이 글은 주로 Nginx를 사용하여 정적 페이지를 배포하는 방법을 소개합니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

Nginx는 작성자입니다. Russians 매우 가벼운 HTTP 서버인 Nginx는 "엔진 X"라고 발음하며 고성능 HTTP 및 역방향 프록시 서버이자 IMAP/POP3/SMTP 프록시 서버이기도 합니다. Nginx는 러시아인 Igor Sysoev가 러시아에서 두 번째로 방문객이 많은 Rambler.ru 사이트를 위해 개발했으며, 이 사이트는 2년 반 이상 운영되었습니다. Igor Sysoev는 BSD 라이센스에 따라 프로젝트를 구축했습니다. Nginx는 HTTP 서버로서 다음과 같은 기본 기능을 가지고 있습니다:

정적 파일, 인덱스 파일 처리 및 파일 설명자 버퍼링 활성화.

  1. 캐시 없는 역방향 프록시 가속, 간단한 로드 밸런싱 및 내결함성.

  2. FastCGI, 간단한 로드 밸런싱 및 내결함성.

  3. 모듈형 구조. gzipping, 바이트 범위, 청크 응답 및 SSI 필터와 같은 필터를 포함합니다. 단일 페이지에 존재하는 여러 SSI가 Fast CGI 또는 다른 프록시 서버에서 처리되는 경우 이 처리는 서로 기다리지 않고 병렬로 실행될 수 있습니다.

  4. SSL 및 TLSSNI를 지원합니다.

  5. Nginx의 장점: 경량, 고성능, 강력한 동시성. 정적 페이지를 배포하는 것도 매우 편리합니다.

    이러한 성능은 Nginx 프레임워크 덕분입니다. Nginx가 시작된 후에는 마스터 프로세스와 여러 작업자 프로세스가 있습니다. 마스터 프로세스는 외부 세계로부터 신호 수신, 각 작업자 프로세스에 신호 보내기, 작업자 프로세스의 실행 상태 모니터링, 작업자 프로세스 종료 시 자동으로 새 작업자 프로세스 다시 시작 등 작업자 프로세스를 관리하는 데 사용됩니다. 비정상적인 상황). 기본 네트워크 이벤트는 작업자 프로세스에서 처리됩니다. 여러 작업자 프로세스는 P2P 방식으로 클라이언트의 요청을 놓고 동등하게 경쟁하며 각 프로세스는 서로 독립적입니다. 요청은 하나의 작업자 프로세스에서만 처리할 수 있으며 작업자 프로세스는 다른 프로세스의 요청을 처리할 수 없습니다. 작업자 프로세스 수는 설정할 수 있으며 일반적으로 머신의 CPU 코어 수와 일치하도록 설정합니다. 이는 Nginx의 프로세스 모델 및 이벤트 처리 모델과 관련이 있습니다.

Nginx를 선택하는 이유

Nginx라고 하면 가장 먼저 떠오르는 것이 리버스 프록시와 로드 밸런싱입니다. 그렇다면 역방향 프록시란 무엇이며 로드 밸런싱이란 무엇입니까?
역방향 프록시

먼저 정방향 프록시가 무엇인지 이해해 봅시다. 네트워크 프록시라고도 알려진 프록시는 일반적으로 클라이언트와 대상 서버 사이의 중개자 역할을 하며 클라이언트의 요청을 받은 다음 클라이언트의 요청에 따라 대상 서버에 해당 요청을 시작합니다. . 요청하고 대상 서버에서 지정된 리소스를 가져와 클라이언트에 반환합니다. 그리고 프록시 서버는 대상 서버의 리소스를 로컬 캐시로 다운로드할 수 있습니다. 클라이언트가 얻으려는 리소스가 프록시 서버의 캐시에 있는 경우 프록시 서버는 대상 서버에 대한 요청을 시작하지 않고 직접 반환합니다. 캐시된 리소스.

실제로 프록시 서버는 매우 일반적입니다. 예를 들어 GWF로 인해 존재하는 일부 과학 인터넷 에이전트는 과학적인 인터넷 액세스를 달성하기 위해 도메인 이름을 올바르게 확인하기 위해 외국 서버를 프록시 서버로 사용합니다. 프록시 서버는 실제 IP를 숨길 수도 있습니다. 예를 들어 유명한 Tor(Onion Router)는 익명 통신을 달성하기 위해 여러 프록시와 일부 암호화 기술을 사용합니다.

역방향 프록시는 클라이언트가 아닌 서버측에서 프록시로 사용됩니다. 즉, 순방향 프록시는 내부 네트워크 사용자가 인터넷에서 서버의 연결 요청에 액세스하기 위한 프록시입니다. 역방향 프록시는 프록시 서버를 사용하여 인터넷에서 연결 요청을 수락한 다음 요청을 전달하는 것입니다. 내부 네트워크의 서버로 전송하고 서버에서 서버로 요청을 전송합니다. 얻은 결과는 인터넷에서 연결을 요청하는 클라이언트로 반환됩니다. 이때 프록시 서버는 외부 세계에 서버로 나타납니다.

로드 밸런싱

역방향 프록시 로드 밸런싱 기술은 인터넷의 연결 요청을 역방향 프록시 방식으로 내부 네트워크의 여러 서버에 동적으로 전달하여 처리함으로써 로드 밸런싱의 목적을 달성합니다.

우연히 Nginx가 모든 것을 해냈습니다

우수한 프록시 서버인 Nginx에는 역방향 프록시와 로드 밸런싱이 있어야 합니다. 이 지식과 ​​사용법에 대해 더 자세히 알고 싶다면 기사 마지막 부분에 있는 Nginx 시작 가이드를 참조하세요.

Nginx 설치

Tencent Cloud 서버를 사용하고 있으며 버전은 Ubuntu Server 14.04.1 LTS 32비트입니다.

$ apt-get install nginx

Mac OS 시스템에서는 Mac OS에 Nginx 설치 문서를 참조합니다. 그리고 이것이 이 글의 초점이다.

Nginx 的配置系统由一个主配置文件和其他一些辅助的配置文件构成。这些配置文件均是纯文本文件,一般地,我们只需要配置主配置文件就行了。例如在我的服务器上是在:/etc/nginx/nginx.conf

指令上下文

nginx.conf 中的配置信息,根据其逻辑上的意义,对它们进行了分类,也就是分成了多个作用域,或者称之为配置指令上下文。不同的作用域含有一个或者多个配置项。

其中每个配置项由配置指令和指令参数构成,形成一个键值对,# 后面地为注释,理解起来也非常容易。

一般配置文件的结构和通用配置如下:

user www-data;  # 运行 nginx 的所属组和所有者
worker_processes 1;  # 开启一个 nginx 工作进程,一般 CPU 几核就写几
pid /run/nginx.pid;  # pid 路径

events {
    worker_connections 768;  # 一个进程能同时处理 768 个请求
    # multi_accept on;
}

# 与提供 http 服务相关的配置参数,一般默认配置就可以,主要配置在于 http 上下文里的 server 上下文
http {
    ##
    # Basic Settings
    ##

    ... 此处省略通用默认配置

    ##
    # Logging Settings
    ##
    ... 此处省略通用默认配置

    ##
    # Gzip Settings
    ##

    ... 此处省略通用默认配置

    ##
    # nginx-naxsi config
    ##

    ... 此处省略通用默认配置

    ##
    # nginx-passenger config
    ##

    ... 此处省略通用默认配置

    ##
    # Virtual Host Configs
    ##

    ... 此处省略通用默认配置

    # 此时,在此添加 server 上下文,开始配置一个域名,一个 server 配置段一般对应一个域名
    server {
        listen 80;        # 监听本机所有 ip 上的 80 端口
        server_name _;      # 域名:www.example.com 这里 "_" 代表获取匹配所有
        root /home/filename/;  # 站点根目录

        location / {       # 可有多个 location 用于配置路由地址
            try_files index.html =404;
        }
}

# 邮箱的配置,因为用不到,所以把这个 mail 上下文给注释掉
#mail {
#    # See sample authentication script at:
#    # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#    
#    # auth_http localhost/auth.php;
#    # pop3_capabilities "TOP" "USER";
#    # imap_capabilities "IMAP4rev1" "UIDPLUS";
#   
#    server {
#        listen   localhost:110;
#        protocol  pop3;
#        proxy    on;
#    }
#
#    server {
#        listen   localhost:143;
#        protocol  imap;
#        proxy    on;
#    }
#}

这里需要注意的是 http 上下文里的 server 上下文。

server {
    listen 80;        # 监听本机所有 ip 上的 80 端口
    server_name _;      # 域名:www.example.com 这里 "_" 代表获取匹配所有
    root /home/filename/;  # 站点根目录

    location / {       # 可有多个 location 用于配置路由地址
      try_files index.html =404;
    }
}

这里的 root 字段最好写在 location 字段的外边,防止出现无法加载 css、js 的情况。因为 css、js 的加载并不是自动的,nginx 无法执行,需要额外的配置来返回资源,所以,对于静态页面的部署,这样做是最为方便的。

这里对 root 作进一步解释,例如在服务器上有 /home/zhihu/ 目录,其下有 index.html 文件和 css/ 以及 img/ , root /home/zhihu/; 就将指定服务器加载资源时是在 /home/zhihu/ 下查找。

其次, location 后的匹配分多种,其各类匹配方式优先级也各不相同。这里列举一精确匹配例子:

server {
    listen 80;        
    server_name _;      
    root /home/zhihu/;  

    location = /zhihu {
      rewrite ^/.* / break;
      try_files index.html =404;
    }
}

此时,访问 www.example.com/zhihu 就会加载 zhihu.html 出来了。由于 location 的精确匹配,只有访问 www.example.com/zhihu 这个路由时才会正确响应,而且此时要通过 rewrite 正则匹配,把 /zhihu 解析替换成原来的 / 。关于更多 location 字段用法,可以在文章最后给出的参考资料中查看。

关于使用 nginx 部署静态页面,最简单便捷的配置方法

上面说了挺多关于配置的说明,下面推荐一种个人认为最为便捷的配置方法。(特此感谢 guyskk 学长的答疑解惑)

首先创建一个目录,例如: /home/ubuntu/website 然后在这个 website 文件夹下可以放置你需要部署的静态页面文件,例如 website 下我有 google、zhihu、fenghuang 这三个文件夹,其中 server 字段配置如下:

server {
    listen 80;
    server_name _;
    root /home/ubuntu/website;
    index index.html;
}

这里每个文件夹下面的静态页面文件名都是 index.html ,我以前有个很不好的习惯,比如 zhihu 页面就喜欢命名为 zhihu.html ,但就从前端来看,这也是不符合规范的。

这样配置的话,例如当你访问 www.showzeng.cn/google/ 时,nginx 就会去 website 目录下的 google 文件夹下寻找到 index.html 并把 google 页面返回,同理,访问 www.showzeng.cn/zhihu/ 时,会寻找到 zhihu 文件夹下的 index.html 并把 zhihu 页面返回。

而在 zhihu、google 、fenghuang 文件夹的同级目录上,再添加你的域名首页 index.html 时,访问 www.example.com 时就会返回了。

这里唯一美中不足的是,访问域名中 www.showzeng.cn/zhihu 末尾会自动加上 / ,在浏览器中按 F12 调试会发现 www.showzeng.cn/zhihu 为 301 状态码,因为 index.html 是在 zhihu/ 文件夹下,所以在搜索过程中会重定向到 www.showzeng.cn/zhihu/ ,起初我是接受不了的,那一 / 看起来太难受了,但是只要一想到要一个一个 location 字段去匹配,我一下子就接受了。不知道你怎么看,反正我是接受了。

Nginx 启动运行

$ sudo nginx -s reload

使用 reload 方法不用重启服务,直接重新加载配置文件,客户端感觉不到服务异常,实现平滑切换。当然你也可以重新启动 nginx 服务。

$ sudo service nginx restart

Nginx 停止运行

$ sudo nginx -s stop

相关推荐:

nginx应用:使用nginx进行负载均衡

使用nginx搭建高可用,高并发的wcf集群

위 내용은 Nginx를 사용하여 정적 페이지를 배포하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.