>백엔드 개발 >PHP 튜토리얼 >처음부터 nginx 구성

처음부터 nginx 구성

WBOY
WBOY원래의
2016-08-08 09:27:381083검색

재인쇄: http://oilbeater.com/nginx/2014/12/29/nginx-conf-from-zero.html

기본 개념

가장 일반적인 용도 Nginx는 역방향 프록시 서비스를 제공하는데 역방향 프록시란 무엇입니까? 나는 많은 본토 동포들이 이 마법의 땅에서 순방향 프록시를 사용했다고 믿습니다. 원칙은 대략 다음과 같습니다.

프록시 서버는 클라이언트 측에서 수락을 중개하는 역할을 합니다. , 실제 클라이언트를 숨기고 서버에서 리소스를 얻습니다. 프록시 서버가 만리장성 외부에 있는 경우 만리장성을 넘는 목적을 달성하는 데에도 도움이 될 수 있습니다. 이름에서 알 수 있듯이 역방향 프록시는 프록시 서버를 서버의 중개자로 사용하여 실제로 서비스를 제공하는 서버를 숨기는 것입니다. 원칙은 대략 다음과 같습니다.

물론 이는 만리장성을 달성하기 위한 것이 아니라 보안 및 로드 밸런싱과 같은 일련의 기능을 달성하기 위한 것입니다. 소위 보안이란 클라이언트의 요청이 인트라넷 서버로 직접 전달되지 않고 프록시를 통해 전달된다는 의미입니다. 이 계층에서는 보안 필터링, 흐름 제어 및 DDOS 방지와 같은 일련의 전략을 구현할 수 있습니다. 로드 밸런싱이란 실제로 백엔드에서 서비스를 제공하는 서버의 수를 수평적으로 확장할 수 있다는 의미입니다. 에이전트는 규칙에 따라 각 서버에 요청을 전달하여 각 서버의 로드가 거의 균형을 이루도록 합니다.

그리고 nginx는 매우 인기 있는 역방향 프록시 서비스입니다.

설치

Ubuntu에서는 컴파일과 설치 과정을 건너뛰고 apt-get을 바로 사용할 수 있습니다

<code>sudo apt-get install nginx
</code>

설치 후 nginx 서비스를 시작하려면 :

<code>sudo service nginx start
</code>

을 직접 사용하세요. nginx는 기본적으로 포트 80 전달을 설정합니다. 브라우저에서 http://locallhost를 방문하여 확인할 수 있습니다.

초기 구성

nginx의 기본 구성 파일은

<code>/etc/nginx/nginx.conf
</code>

에 있습니다. 구성을 배우는 가장 좋은 방법은 예제로 시작하는 것이 아닙니다. start with 다른 구성을 보려면 nginx 기본 페이지와 관련된 구성을 직접 살펴보세요. 구성 파일에 다음 줄이 있습니다.

<code>include /etc/nginx/sites-enabled/*;
</code>

이 줄은 외부 구성 파일을 로드합니다. 사이트 사용 폴더에는 기본 파일이 하나만 있습니다. nginx의 기본 프록시를 담당합니다. 구성 내용을 축소하면 다음 줄이 표시됩니다.

<code>server {
    server_name localhost;
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
    try_files $uri $uri/ =404;
    }
}
</code>

대규모 웹사이트에는 일반적으로 nginx에서 해당 서비스를 제공하는 자체 서버가 있는 여러 하위 사이트가 있습니다. 이러한 다양한 서비스 구성은 가상 호스트라는 개념을 통해 이루어집니다. 이것이 위 구성에서 서버의 의미입니다. 예를 들어 Google에는 번역과 학술이라는 두 가지 제품이 있습니다. nginx 구성 파일에 두 개의 서버를 구성할 수 있습니다. 이 경우 각각 다른 URL입니다. 요청은 nginx의 해당 설정과 일치하며 다른 백엔드 서버로 전달됩니다. 여기 server이름은 클라이언트 http 요청의 호스트 줄과 일치합니다.

이 예에서 server_name은 localhost이므로 브라우저에서 localhost를 통해 페이지 구성에 액세스할 수 있습니다. 다음 두 수신은 각각 ipv4 및 ipv6의 수신 포트에 해당합니다. 8080으로 설정하면 localhost:8080을 통해서만 기본 페이지에 액세스할 수 있습니다.

default_server의 의미는 nginx에 존재하지 않는 다른 http 요청 호스트 설정이 있는 경우 이 서버의 구성이 사용된다는 의미입니다. 예를 들어, 127.0.0.1에 액세스하면 처리를 위해 이 서버에도 속하게 됩니다.

각 URL 요청은 서비스에 해당하며 nginx는 이를 처리하여 로컬 파일 경로나 다른 서버의 서비스 경로로 전달합니다. 이 경로의 일치는 위치를 통해 수행됩니다. 서버는 도메인 이름에 해당하는 구성으로, 위치는 도메인 이름 아래의 보다 세부적인 경로 구성으로 생각할 수 있습니다.

위치 일치 /, 즉 localhost에서 /xxx 또는 /yyy로 시작하는 모든 요청은 이 단순하고 대략적인 일치 외에도 nginx는 정규적이고 완전한 일치 및 기타 구성을 거쳐야 합니다. 정밀한 매칭 방법. 그리고 tryfiles는 nginx가 다음 순서로 파일에 액세스하고 첫 번째로 일치하는 파일을 반환한다는 것을 의미합니다. 예를 들어, localhost/test를 요청하면 /test 파일을 찾고, 찾을 수 없으면 /test/를 찾습니다. 또한 위치 구성에서 프록시패스를 사용할 수도 있습니다. 역방향 프록시 및 로드 밸런싱을 구현하지만 이 가장 간단한 구성은 포함되지 않습니다.

여기서 루트는 로컬 폴더를 모든 URL 요청의 루트 경로로 사용하는 것을 의미합니다. 예를 들어, 사용자가 localhost/test를 요청하면 nginx는 /usr/share/nginx/html 폴더에서 테스트 파일을 찾아 반환합니다.

그리고 index는 기본 액세스 페이지입니다. localhost에 접속하면 루트 파일 경로에서 index.html과 index.htm을 자동으로 검색하여 가장 먼저 찾은 결과를 반환합니다.

위치 고급 구성

上面的配置只是将用户的 url 映射到本地的文件,并没有实现传说中的反向代理和负载均衡(当然 nginx 做静态文件的分发也是想到的厉害),下面我们就来进一步配置 location 看看怎么实现。

配置起来很简单比如我要将所有的请求到转移到真正提供服务的一台机器的 8080 端口,只要这样:

<code>location / {
    proxy_pass 123.34.56.67:8080;
}
</code>

这样所有的请求就都被反向代理到 123.34.56.67 去了。这样我们反向代理的功能是实现了,可是就能代理到一台服务器上哪有什么负载均衡呀?这就要用到 nginx 的 upstream 模块了。

<code>upstream backend {
    ip_hash;    
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    server backend4.example.com;
}
location / {
    proxy_pass http://backend;
}
</code>

我们在 upstream 中指定了一组机器,并将这个组命名为 backend,这样在 proxypass 中只要将请求转移到 backend 这个 upstream 中我们就实现了在四台机器的反向代理加负载均衡。其中的 iphash 指明了我们均衡的方式是按照用户的 ip 地址进行分配。

要让配置生效,我们不必重启 nginx 只需要 reload 配置即可。

<code>sudo service nginx reload
</code>

总结

以上是最简单的通过 nginx 实现静态文件转发、反向代理和负载均衡的配置。在 nginx 中所有的功能都是通过模块来实现的,比如当我们配置 upstream 时是对 upstream 模块,而 server 和 location 是在 http core 模块,其他的还有流控的 limt 模块,邮件的 mail 模块,https 的 ssl 模块。他们的配置都是类似的可以再 nginx 的模块文档中找到详细的配置说明。


以上就介绍了nginx 配置从零开始,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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