>  기사  >  운영 및 유지보수  >  Nginx 설치 및 구성 예시 분석

Nginx 설치 및 구성 예시 분석

WBOY
WBOY앞으로
2023-05-17 23:28:04788검색

nginx는 무료 오픈 소스 고성능 http 서버이자 역방향 프록시 서버입니다. 또한 imap, pop3 및 smtp 프록시 서버이기도 합니다. nginx는 웹사이트 게시 및 처리를 위한 http 서버로 사용할 수 있습니다. 역방향 프록시 서버로 사용됩니다. 프록시에 대한 로드 밸런싱 구현.

여기에서는 세 가지 측면을 통해 nginx를 간략하게 소개합니다

역방향 프록시 로드 밸런싱 nginx 기능 1. 역방향 프록시

프록시에 대하여

프록시에 관해 말하자면 우선 개념을 명확히 해야 합니다. 소위 프록시는 대표, A 채널

이때 에이전트 역할과 대상 역할이라는 두 가지 역할이 설계되어 일부 작업을 완료하기 위해 이 에이전트를 통해 대상 역할에 액세스하는 프로세스를 호출합니다. 에이전트 운영 과정은 마치 인생 매장과 같습니다~ ​​고객이 아디다스 매장에서 신발을 구매했습니다. 이 매장은 에이전트이고, 에이전트 역할은 아디다스 제조업체이며, 대상 역할은 사용자입니다

Nginx 설치 및 구성 예시 분석

forward Agent

Reverse Agency에 대해 이야기하기 전에 먼저 살펴보겠습니다. Forward Proxy를 살펴보면 Forward Proxy도 모두가 접하게 되는 가장 일반적인 Proxy 모델에 대해 이야기하겠습니다.

오늘날의 네트워크 환경에서는 기술적 요구로 인해 특정 외국 웹 사이트에 액세스해야 하는 경우 특정 웹 사이트에 액세스할 수 없다는 것을 알게 될 것입니다. 이때, 누구나 fq를 이용하여 접속할 수 있는데, fq의 주요 방법은 외국 웹사이트에 접근할 수 있는 프록시 서버를 찾는 것이고, 프록시 서버에 요청을 보내는 것입니다. 외국 웹사이트에 접속한 후, 접속한 데이터를 우리에게 전달합니다!

위 프록시 모드를 순방향 프록시라고 합니다. 순방향 프록시의 가장 큰 특징은 클라이언트가 액세스하려는 서버 주소에 대해 매우 명확하다는 것입니다. 서버는 요청이 어떤 프록시 서버에서 왔는지 알 수 있지만 어떤 특정 클라이언트는 알 수 없습니다. 실제 클라이언트 정보는 프록시 모드에서 차단되거나 숨겨집니다.

Nginx 설치 및 구성 예시 분석

역방향 프록시

순방향 프록시가 무엇인지 이해한 후 역방향 프록시의 처리 방법을 계속 살펴보겠습니다. 예를 들어 Datianchao에 연결된 웹 사이트가 있습니다. 표 1은 단일 서버로는 사람들의 증가하는 구매 욕구를 충족시킬 수 없음을 보여줍니다. 이때 분산 배포라는 용어가 등장했습니다. 특정 보물 웹사이트에서 방문자 수 제한 문제를 해결하기 위해 대부분의 기능은 역방향 프록시용 nginx를 사용하여 직접 구현되며 nginx 및 기타 구성 요소를 캡슐화한 후 tengine

이라는 멋진 이름을 갖습니다. 역방향 프록시가 구현되고 배포되었나요? 클러스터 작업에 대해 먼저 개략적인 다이어그램을 살펴보겠습니다.

Nginx 설치 및 구성 예시 분석

위 다이어그램을 보면 nginx 서버가 여러 클라이언트에서 서버로 보낸 요청을 받은 후 이를 명확하게 볼 수 있습니다. 최종적으로 업무 처리 서버에서 일정한 규칙에 따라 백엔드에 배포합니다. 이때 요청의 출처는 명확하지만, 어느 서버가 요청을 처리하는지 명확하지 않습니다. nginx는 역방향 프록시 역할을 합니다

역방향 프록시는 주로 서버 클러스터 배포에 사용됩니다. , 역방향 프록시는 서버 정보를 숨깁니다!

프로젝트 시나리오

일반적으로 실제 프로젝트를 운영할 때 응용 시나리오에는 순방향 프록시와 역방향 프록시가 존재할 가능성이 높습니다. 대상 서버에 액세스하려는 순방향 프록시 클라이언트의 요청은 대상 서버가 역방향 단일입니다. - 여러 실제 비즈니스 처리 서버를 역방향으로 프록시하는 관심 서버. 구체적인 토폴로지 다이어그램은 다음과 같습니다.

Nginx 설치 및 구성 예시 분석

2. 로드 밸런싱

소위 프록시 서버라는 개념을 명확히 하였으므로 다음으로 nginx가 리버스 프록시 서버의 역할을 하며, 어떤 규칙이 있는지 알아봅니다. 배포 요청은 어떻게 되나요? 다양한 프로젝트 적용 시나리오에 대해 배포 규칙을 제어할 수 있습니까?

여기에 언급된 클라이언트가 보내고 nginx 역방향 프록시 서버가 받는 요청 수를 우리는 로드라고 부릅니다.

요청 수는 일종의 균형 규칙인 특정 규칙에 따라 처리하기 위해 여러 서버에 분산됩니다.

그래서~ 서버가 받은 요청을 규칙에 따라 분배하는 과정을 로드 밸런싱이라고 합니다.

실제 프로젝트 운영 과정에서 로드 밸런싱에는 하드웨어 로드 밸런싱과 소프트웨어 로드 밸런싱의 두 가지 유형이 있습니다. 하드웨어 로드 밸런싱은 f5 로드 밸런싱과 같이 상대적으로 비용이 많이 들고 비용이 많이 들지만 안정성과 데이터 보안 등. China Mobile 및 China Unicom과 같은 회사는 매우 좋은 보장이 있는 경우에만 하드 로드 작업을 선택합니다. 더 많은 회사가 비용상의 이유로 소프트웨어 로드 밸런싱을 사용하도록 선택할 것입니다. . 하드웨어

Nginx 설치 및 구성 예시 분석

nginx에 구현된 메시지 큐 분배 메커니즘은 다음과 같은 로드 밸런싱 스케줄링 알고리즘을 지원합니다:

가중치 폴링(기본값): 수신된 요청은 순서대로 하나씩 다른 백엔드 서버에 분배됩니다. 사용 중에 백엔드 서버가 다운되더라도 nginx는 대기열에서 서버를 자동으로 제거하므로 요청 수락은 어떤 식으로든 영향을 받지 않습니다. 이러한 방식으로 서로 다른 백엔드 서버에 대해 가중치 값(가중치)을 설정하여 서로 다른 서버의 요청 할당 비율을 조정할 수 있으며, 가중치 데이터가 클수록 요청에 할당될 확률이 높아집니다. , 실제 작업 환경에서 다양한 백엔드 서버 하드웨어 구성에 맞게 주로 조정됩니다.

ip_hash: 각 요청은 시작 클라이언트 IP의 해시 결과에 따라 일치됩니다. 이 알고리즘에 따라 고정 IP 주소를 가진 클라이언트는 항상 동일한 백엔드 서버에 액세스하므로 클러스터 배포 환경의 문제도 해결됩니다. 세션 공유에 어느 정도 문제가 있습니다.

fair: 스케줄링 알고리즘의 지능적 조정, 요청 처리부터 백엔드 서버의 응답까지의 시간을 기준으로 동적이며 균형 잡힌 할당 응답 시간이 짧고 처리 효율성이 높은 서버는 요청에 할당될 확률이 높습니다. , 응답 시간이 길고 처리 효율성이 낮은 서버가 할당됩니다. 처음 두 가지의 장점을 결합한 스케줄링 알고리즘입니다. 그러나 nginx는 기본적으로 fair 알고리즘을 지원하지 않는다는 점에 유의해야 합니다. 이 스케줄링 알고리즘을 사용하려면 upstream_fair 모듈을 설치하세요.

url_hash: 액세스한 URL의 해시 결과에 따라 요청을 할당하고, 각 요청은 백엔드의 고정 위치를 가리킬 것입니다. nginx를 정적 서버로 사용하면 서버는 캐싱 효율성을 향상시킬 수 있습니다. nginx는 기본적으로 이 스케줄링 알고리즘을 지원하지 않습니다. 이를 사용하려면 nginx 해시 소프트웨어 패키지를 설치해야 합니다

nginx 설치 1. Windows 설치

공식 웹사이트 다운로드 주소:

https://nginx.org/en/download.html

아래 그림과 같이 해당 버전을 다운로드합니다. 컴퓨터의 소프트웨어가 저장된 폴더에 nginx 압축 패키지의 압축을 풀면 됩니다. 압축 풀기가 완료된 후 파일 디렉터리 구조는 다음과 같습니다.

Nginx 설치 및 구성 예시 분석

Start nginx

1) 이 디렉터리에서 nginx를 직접 두 번 클릭하면 nginx 서버를 시작할 수 있습니다Nginx 설치 및 구성 예시 분석

2) nginx 명령을 실행하면 nginx 서버가 직접 시작됩니다

d:/resp_application/nginx-1.13.5> nginx

nginx를 방문하세요

브라우저를 열고 주소를 입력하세요: http:// localhost, 페이지에 액세스하면 성공적인 액세스를 나타내는 다음 페이지가 나타납니다Nginx 설치 및 구성 예시 분석

Stop nginx

nginx 루트 디렉터리를 입력하는 명령줄에서 다음을 실행합니다. 서버를 중지하려면 다음 명령을 사용하세요.Nginx 설치 및 구성 예시 분석

# 强制停止nginx服务器,如果有未处理的数据,丢弃
d:/resp_application/nginx-1.13.5> nginx -s stop

# 优雅的停止nginx服务器,如果有未处理的数据,等待处理完成之后停止
d:/resp_application/nginx-1.13.5> nginx -s quit

2. Ubuntu 설치

일반 소프트웨어 설치 방법을 따르세요. 다음 명령을 통해 직접 설치하세요. Nginx 설치 및 구성 예시 분석

$ sudo apt-get install nginx

설치가 완료됩니다. 디렉토리는 nginx 명령어가 위치한 디렉토리이고 /etc/nginx/ 디렉토리는 모든 nginx 구성 파일이 위치한 디렉토리입니다. nginx 서버 및 로드 밸런싱 정보를 구성하는데 사용됩니다

nginx 프로세스가 시작되었는지 확인하세요Nginx 설치 및 구성 예시 분석

$ ps -ef|grep nginx

nginx는 현재 호스트 CPU의 코어 수에 따라 해당 수의 프로세스를 자동으로 생성합니다(현재 우분투 호스트는 2코어와 4스레드로 구성되어 있습니다)

참고: 여기에서 시작된 서비스 프로세스는 실제로 4개입니다. 왜냐하면 nginx 프로세스가 시작되면 공식 프로세스가 비정상적으로 종료되는 것을 방지하기 위해 데몬 프로세스가 동반되기 때문입니다. 데몬 프로세스가 반환되고 nginx 상속이 종료되면 프로세스가 자동으로 다시 시작됩니다.

데몬 프로세스를 일반적으로 마스터 프로세스, 비즈니스 프로세스를 워커 프로세스라고 합니다Nginx 설치 및 구성 예시 분석

nginx 서버 명령 시작

nginx를 직접 실행하면 기본 구성 파일에 따라 서버가 시작됩니다

$ nginx

중지

nginx 서비스 명령

和windows系统执行过程一样,两种停止方式

$ nginx -s stop
or
$ nginx -s quit

Nginx 설치 및 구성 예시 분석 

重新启动加载

同样也可以使用命令reopen和reload来重新启动nginx或者重新加载配合着文件。

3. mac os安装

直接通过brew进行nginx的安装,或者下载tar.gz压缩包都是可以的。

直接通过brew进行安装

brew install nginx

安装完成后,后续的命令操作,服务器的启动、进程查看、服务器的停止、服务器的重启已经文件加载命令都是一致的。

nginx配置

nginx是一个功能非常强大的web服务器加反向代理服务器,同时又是邮件服务器等等

在项目使用中,使用最多的三个核心功能是反向代理、负载均衡和静态服务器

这三个不同的功能的使用,都跟nginx的配置密切相关,nginx服务器的配置信息主要集中在nginx.conf这个配置文件中,并且所有的可配置选项大致分为以下几个部分

main                # 全局配置

events {              # nginx工作模式配置

}

http {                # http设置
....

server {            # 服务器主机配置
....
location {          # 路由配置
....
}

location path {
....
}

location otherpath {
....
}
}

server {
....

location {
....
}
}

upstream name {          # 负载均衡配置
....
}
}

如上述配置文件所示,主要由6个部分组成:

main:用于进行nginx全局信息的配置 events:用于nginx工作模式的配置 http:用于进行http协议信息的一些配置 server:用于进行服务器访问信息的配置 location:用于进行访问路由的配置 upstream:用于进行负载均衡的配置 main模块

观察下面的配置代码

# user nobody nobody;
worker_processes 2;
# error_log logs/error.log
# error_log logs/error.log notice
# error_log logs/error.log info
# pid logs/nginx.pid
worker_rlimit_nofile 1024;

上述配置都是存放在main全局配置模块中的配置项

user用来指定nginx worker进程运行用户以及用户组,默认nobody账号运行 worker_processes指定nginx要开启的子进程数量,运行过程中监控每个进程消耗内存(一般几m~几十m不等)根据实际情况进行调整,通常数量是cpu内核数量的整数倍 error_log定义错误日志文件的位置及输出级别【debug / info / notice / warn / error / crit】 pid用来指定进程id的存储文件的位置 worker_rlimit_nofile用于指定一个进程可以打开最多文件数量的描述 event 模块

上干货

event {
worker_connections 1024;
multi_accept on;
use epoll;
}

上述配置是针对nginx服务器的工作模式的一些操作配置

worker_connections 指定最大可以同时接收的连接数量,这里一定要注意,最大连接数量是和worker processes共同决定的。 multi_accept 配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接 use epoll 配置指定了线程轮询的方法,如果是linux2.6+,使用epoll,如果是bsd如mac请使用kqueue http模块

作为web服务器,http模块是nginx最核心的一个模块,配置项也是比较多的,项目中会设置到很多的实际业务场景,需要根据硬件信息进行适当的配置,常规情况下,使用默认配置即可!

http {
##
# 基础配置
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# ssl证书配置
##
ssl_protocols tlsv1 tlsv1.1 tlsv1.2; # dropping sslv3, ref: poodle
ssl_prefer_server_ciphers on;
##
# 日志配置
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# gzip 压缩配置
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript
text/xml application/xml application/xml+rss text/javascript;

##
# 虚拟主机配置
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

1) 基础配置

sendfile on:配置on让sendfile发挥作用,将文件的回写过程交给数据缓冲去去完成,而不是放在应用中完成,这样的话在性能提升有有好处
tc_nopush on:让nginx在一个数据包中发送所有的头文件,而不是一个一个单独发
tcp_nodelay on:让nginx不要缓存数据,而是一段一段发送,如果数据的传输有实时性的要求的话可以配置它,发送完一小段数据就立刻能得到返回值,但是不要滥用哦
keepalive_timeout 10:给客户端分配连接超时时间,服务器会在这个时间过后关闭连接。一般设置时间较短,可以让nginx工作持续性更好
client_header_timeout 10:设置请求头的超时时间
client_body_timeout 10:设置请求体的超时时间
send_timeout 10:指定客户端响应超时时间,如果客户端两次操作间隔超过这个时间,服务器就会关闭这个链接
limit_conn_zone $binary_remote_addr zone=addr:5m :设置用于保存各种key的共享内存的参数,
limit_conn addr 100: 给定的key设置最大连接数
server_tokens:虽然不会让nginx执行速度更快,但是可以在错误页面关闭nginx版本提示,对于网站安全性的提升有好处哦
include /etc/nginx/mime.types:指定在当前文件中包含另一个文件的指令
default_type application/octet-stream:指定默认处理的文件类型可以是二进制
type_hash_max_size 2048:混淆数据,影响三列冲突率,值越大消耗内存越多,散列key冲突率会降低,检索速度更快;值越小key,占用内存较少,冲突率越高,检索速度变慢

2) 日志配置

access_log logs/access.log:设置存储访问记录的日志
error_log logs/error.log:设置存储记录错误发生的日志

3) ssl证书加密

ssl_protocols:指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols sslv3 tlsv1 tlsv1.1 tlsv1.2,tlsv1.1与tlsv1.2要确保openssl >= 1.0.1 ,sslv3 现在还有很多地方在用但有不少被攻击的漏洞。
ssl prefer server ciphers:设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件

4) 压缩配置

gzip 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。
gzip_disable 为指定的客户端禁用gzip功能。我们设置成ie6或者更低版本以使我们的方案能够广泛兼容。
gzip_static 告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)。
gzip_proxied 允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。
gzip_min_length 设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。
gzip_comp_level 设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。
gzip_type 设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。

5) 文件缓存配置

open_file_cache 打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。
open_file_cache_valid 在open_file_cache中指定检测正确信息的间隔时间。
open_file_cache_min_uses 定义了open_file_cache中指令参数不活动时间期间里最小的文件数。
open_file_cache_errors 指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置。

server模块

srever模块配置是http模块中的一个子模块,用来定义一个虚拟访问主机,也就是一个虚拟服务器的配置信息

server {
listen    80;
server_name localhost  192.168.1.100;
root    /nginx/www;
index    index.php index.html index.html;
charset    utf-8;
access_log  logs/access.log;
error_log  logs/error.log;
......
}

核心配置信息如下:

server:一个虚拟主机的配置,一个http中可以配置多个server

server_name:用力啊指定ip地址或者域名,多个配置之间用空格分隔

root:表示整个server虚拟主机内的根目录,所有当前主机中web项目的根目录

index:用户访问web网站时的全局首页

charset:用于设置www/路径中配置的网页的默认编码格式

access_log:用于指定该虚拟主机服务器中的访问记录日志存放路径

error_log:用于指定该虚拟主机服务器中访问错误日志的存放路径

location模块

location模块是nginx配置中出现最多的一个配置,主要用于配置路由访问信息

在路由访问信息配置中关联到反向代理、负载均衡等等各项功能,所以location模块也是一个非常重要的配置模块

基本配置

location / {
root  /nginx/www;
index  index.php index.html index.htm;
}

location /:表示匹配访问根目录

root:用于指定访问根目录时,访问虚拟主机的web目录

index:在不指定访问具体资源时,默认展示的资源文件列表

反向代理配置方式

通过反向代理代理服务器访问模式,通过proxy_set配置让客户端访问透明化

location / {
proxy_pass http://localhost:8888;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header host $http_host;
}

uwsgi配置

wsgi模式下的服务器配置访问方式

location / {
include uwsgi_params;
uwsgi_pass localhost:8888
}

upstream模块

upstream模块主要负责负载均衡的配置,通过默认的轮询调度方式来分发请求到后端服务器

简单的配置方式如下

upstream name {
ip_hash;
server 192.168.1.100:8000;
server 192.168.1.100:8001 down;
server 192.168.1.100:8002 max_fails=3;
server 192.168.1.100:8003 fail_timeout=20s;
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
}

核心配置信息如下

ip_hash:指定请求调度算法,默认是weight权重轮询调度,可以指定

server host:port:分发服务器的列表配置

--down: 호스트가 서비스를 일시 중지했음을 나타냅니다

-- max_fails: 최대 실패 횟수를 나타냅니다. 최대 실패 횟수가 서비스를 초과하면 서비스가 일시 중지됩니다.

--fail_timeout: 다음을 나타냅니다. 요청이 수락되지 않으면 지정된 시간이 일시 중지된 후 요청이 다시 시작됩니다

위 내용은 Nginx 설치 및 구성 예시 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제