>운영 및 유지보수 >엔진스 >Nginx 서버 설정 및 기본 구성 예시 분석

Nginx 서버 설정 및 기본 구성 예시 분석

王林
王林앞으로
2023-05-23 11:22:061605검색

nginx(엔진 x)는 고성능 http 서버이자 역방향 프록시 서버입니다. 이 소프트웨어는 c10k 문제를 해결하기 위해 개발되었습니다.

nginx의 아키텍처는 많은 최신 운영 체제 기능을 활용하여 고성능 http 서버를 구현합니다. 예를 들어, Linux 시스템에서 nginx는 epoll, sendfile, file aio, directio 및 기타 메커니즘을 사용하여 nginx를 매우 효율적으로 만들 뿐만 아니라 리소스 사용량도 매우 낮다고 관계자는 nginx가 10,000개의 비활성 http를 유지하는 데 2.5만 필요하다고 주장합니다. m 메모리 연결 유지.
Nginx 서버 설정 및 기본 구성 예시 분석
nginx는 필요에 따라 마스터 프로세스(마스터)와 여러 작업자 프로세스(작업자) 등 여러 프로세스를 동시에 실행합니다. 캐시가 구성되면 캐시 로더 프로세스(캐시 로더)와 캐시도 있습니다. 관리자 프로세스(캐시 관리자) 등 모든 프로세스에는 하나의 스레드만 포함되며 프로세스 간 통신은 주로 "공유 메모리" 메커니즘을 통해 실현됩니다. 기본 프로세스는 루트 사용자로 실행되는 반면 작업자, 캐시 로더 및 캐시 관리자는 모두 권한이 없는 사용자로 실행되어야 합니다.

1. nginx 설치
epel 소스의 centos6 버전에는 nginx의 rpm 패키지가 추가되었는데, 이 rpm 패키지의 버전이 더 낮습니다. 버전을 업데이트해야 하는 경우 공식 제작된 rpm 패키지를 사용하거나, 소스 코드 패키지를 사용하여 컴파일하고 설치할 수 있습니다.

Taobao의 tengine 및 openresty와 같이 향상된 보조 개발 기능을 갖춘 일부 nginx 버전을 사용할 수도 있는데 이는 좋은 선택입니다.

1.1 공통 컴파일 매개변수

--prefix=path: nginx의 설치 디렉터리를 지정합니다.
--conf-path=path: nginx.conf 구성 파일 경로를 지정합니다.
--user=name: 사용자 nginx 작업자 프로세스
--with-pcre: pcre 정규식 지원 활성화
--with-http_ssl_module: SSL 지원 활성화
--with-http_stub_status_module: nginx 상태를 모니터링하는 데 사용
--with-http-realip_module: 변경 허용 요청 헤더의 클라이언트 클라이언트 IP 주소
--with-file-aio: 파일 aio 활성화
--add-module=path: 타사 외부 모듈 추가
완전한 컴파일 솔루션은 여기에서 제공됩니다:

-- 접두사=/usr /local/nginx
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path =/var/log/nginx/access.log
--http-client-body-temp-path=/var/tmp/nginx/client_body
--http-proxy-temp-path=/var/tmp/nginx/ 프록시
-- http-fastcgi-temp-path=/var/tmp/nginx/fastcgi
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
--pid-path=/var/run /nginx.pid
--lock-path=/var/lock/nginx
--user=nginx
--group=nginx
--with-file-aio
--with-http_ssl_module
--with-http_realip_module
--with- http_sub_module
--with-http_gzip_static_module
--with-http_stub_status_module
--with-pcre
1.2 nginx 시작 및 종료

nginx 시작:

# nginx -c /etc/nginx/nginx.conf


nginx 닫기

# nginx -s stop


구성 파일 다시 읽기

# nginx -s reload
# pkill -hup nginx


로그 파일을 다시 엽니다

# nginx -s reopen
# pkill -usr1 nginx


nginx rpm 패키지에서 /etc/init.d/nginx 파일을 다운로드하고 사용할 경로를 수정할 수도 있습니다:

# service nginx {start|stop|status|restart|reload|configtest|}


2.

nginx 구성 파일은 주로 기본(전역 설정), http(http에 대한 일반 설정), 서버(가상 호스트 설정), 위치(URL 경로 일치)의 네 부분으로 나뉩니다. 이벤트, 업스트림 등과 같은 다른 구성 섹션도 있습니다.

2.1 일반 설정

user nginx
nginx 작업 프로세스를 실행하는 사용자 및 그룹 지정

worker_rlimit_nofile #
모든 작업자 프로세스가 열 수 있는 최대 파일 수 지정

worker_cpu_affinity
작업자의 CPU 고정성 설정 프로세스를 피하기 위한 프로세스 CPU 간 전환으로 인한 성능 소모. 예를 들어 작업자_cpu_affinity 0001 0010 0100 1000; (쿼드 코어)

worker_processes 4
작업자 프로세스 수는 CPU 수와 동일하게 설정할 수 있습니다. 적절하게 증가

worker_connections 1000
단일 작업자 프로세스가 허용할 수 있는 최대 동시 연결 수는 이벤트 세그먼트에 배치됩니다.

error_loglogs/error.log info
오류 로그의 저장 경로 및 기록 수준

epoll 사용
epoll 이벤트 모델을 사용하고 이벤트 세그먼트에 배치됩니다.

2.2 http 서버

server {}:
가상 호스트 정의

listen 80;
기본적으로 수신 주소와 포트를 정의합니다. 이 머신의 모든 주소

server_name name [...];
가상 호스트 이름을 정의합니다. 여러 이름을 사용할 수 있으며 정규식이나 와일드카드를 사용할 수도 있습니다.

sendfile on
sendfile 호출을 활성화하여 클라이언트에 신속하게 응답

keepalive_timeout 65
긴 연결 시간 제한(초)입니다.

send_timeout
클라이언트 응답 시간 초과 지정

client_max_body_size 10m
클라이언트가 요청할 수 있는 엔터티의 최대 크기

루트 경로
요청에 해당하는 리소스가 있는 파일 시스템의 루트 디렉터리를 설정합니다. URL이 있습니다

location [ = | ~ | ~* | ^~ ] uri { ... }
设置一个 uri 匹配路径
=:精确匹配
~:正则表达式匹配,区分字符大小写
~*:正则表达式匹配,不区分字符大小写
^~:uri 的前半部分匹配,且不实用正则表达式
优先级:
= > location 完整路径 > ^~ > ~ > ~* > location 起始路径 > location /

allow 和 deny
基于 ip 访问控制,如:

仅允许 192.168.0.0/24 网段客户端访问

allow 192.168.0.0/24;
deny all;
stub_status on
开启状态显式,仅能用于 location 中:
开启状态显式页面

location /status {
stub_status on;
allow 172.16.0.0/16;
deny all;
}


rewrite
url 重写,可以使用多种标记
例如:

rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
可用的 flag:
- last:重写完成后,继续匹配其他 rewrite 规则
- break:重写完成后不再继续匹配
- redirect:返回 302 重定向(临时重定向),客户端对重定向的 url 发起新的请求
- permanent:返回 301 重定向(永久重定向),客户端对重定向的 url 发起新的请求

一个 server 配置示例:

server {
 listen  80;
 server_name www.example.com;
 root /web/htdocs;

 location / {
  index index.html index.htm;
 }

 location /status {
  stub_status on;
  allow 10.0.0.0/8;
  deny all;
  access_log off;
}

2.3 ssl 的配置

启用一个 ssl 虚拟主机

server {
  listen 443;
  server_name example.com;

  root /apps/www;
  index index.html index.htm;

  ssl on;
  ssl_certificate /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key /etc/nginx/ssl/nginx.key;

#  ssl_protocols sslv3 tlsv1 tlsv1.1 tlsv1.2;
#  ssl_ciphers all:!adh:!export56:rc4+rsa:+high:+medium:+low:+sslv2:+exp;
#  ssl_prefer_server_ciphers on;

}

其中 ssl_certificate 表示 ca 文件,ssl_certificate_key 表示密钥文件。

如果想把 http 请求强制转到 https,可以这样:

server {
listen  80;
server_name example.me;

return 301 https://$server_name$request_uri;
}


2.4 nginx 做负载均衡反向代理

nginx 做反向代理时,后端主机有多台,可以使用 upstream 定义一个后端主机池,在反向代理时直接使用主机池的名字。在 upstream 中可以定义负载均衡调度算法,权重,健康状态检测等参数。

例如:

upstream backend {
 server 172.16.0.1:80 weight=1 max-fails=3 fail_timeout=10;
 server 172.16.0.2:80 weight=1max-fails=3 fail_timeout=10;;
}


默认请求下,使用 round-robin 调度算法,并有健康状态检查和恢复主机的能力。

ningx 还可以使用这些算法:

ip_hash:基于源地址哈希,主要目的是会话保持
least_conn:基于最少活动连接进行调度
sticky:基于 cookie 进行会话绑定,nginx 会在客户端第一次访问时插入路由信息到 cookie 中,或者选择 cookie 中的某个字段的值作为键,以后每次请求将基于此信息进行调度
基于 cookie 的会话绑定共有 cookie,route 和 learn 三种。

例如,基于 cookie name 的调度:

upstream backend {
 server backend1.example.com;
 server backend2.example.com;

 sticky cookie srv_id expires=1h domain=.example.com path=/;
}


使用此主机组进行反向代理:

location / {
 proxy_pass http://backend;
 proxy_set_header host $host;
 proxy_set_haeder x-forwared-for $proxy_add_x_forwarded_for;
}


proxy_pass url 指定代理的后端主机,可以指定 "http" 或 "https" 协议,域名可以是 ip 地址,也可以是 upstream 池名字

如果代理指定的是一个 uri 地址,如 http://127.0.0.1/remote,那么将直接被代理至指定 uri,无论请求的 uri 是什么
如果代理指定的一个主机而没有 uri,如 http://127.0.0.1,客户端请求的uri将被传递至指定域名
如果 location 中使用模式匹配 url,那么 url 也会被传递至代理 url 的末端
如果 location 中使用了 uri 重写,那么 proxy_pass 会使用重写后的结果进行处理
proxy_set_header header value 对转发的报文首部进行修改

2.5 反向代理时的缓存相关设定

proxy_cache_path path [levels=levels] keys_zone=name:size

定义磁盘缓存路径,nignx 的缓存是以键值方式存放的,keys_zone 用于指定键存放的内存空间名字和大小,对应的值则存放在 path 指定的路径中。levels 可以指定缓存存放路径的级数和名称字符数。此设置只能在 http 段中定义。

如:

proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=one:10m;


proxy_cache_valid [code ...] time 指定不同响应码的内容的缓存时间

如:

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404  1m;
proxy_cache_valid any  1m;


proxy_cache_method method 定义哪些方法的请求结果可以被缓存,如:

proxy_cache_method get;
proxy_cache_method head;


proxy_cache name 指定使用预先定义的缓存空间用于缓存

2.6 fastcgi 代理的设置

使用 fastcgi 时,设置代理的方法同 porxy_pass 类似,同时还可以使用 fastcgi 缓存,设置的方法也和 proxy_cache 类似。

location ~ \.php$ {
 root   /web/htdocs;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param script_filename $document_root$fastcgi_script_name;
 include  fastcgi_params;
}


3. 一些常用内置变量

$arg_name: 요청 uri의 이름 매개변수
$args: 요청 uri의 모든 매개변수, $query_string과 동일
$uri: 현재 요청된 uri, 매개변수 없음
$request_uri: 요청된 uri, 완전한 매개변수 포함
$ 호스트: 호스트 호스트 헤더가 없으면 요청을 처리하는 가상 호스트의 호스트 이름으로 대체됩니다. $hostname: nginx 서비스가 실행 중인 호스트 이름입니다. client ip.$remote_port: 클라이언트 포트
$remote_user: 사용자 인증을 사용할 때 클라이언트 사용자가 입력한 사용자 이름
$request_filename: 사용자 요청의 uri는 로컬 루트 또는 별칭으로 변환된 후 로컬 파일 경로에 매핑됩니다
$request_method: 요청 방법
$server_addr: 서버 주소
$server_name: 서버 이름
$server_port: 서버 포트
$server_protocol: 서버가 클라이언트에 응답을 보낼 때의 프로토콜(예: http/1.1, http/1.0
$) 구성표: 요청에 사용된 구성표(예: https: //www.magedu.com/의 https
$http_name: $http_host와 같은 요청 메시지의 지정된 헤더와 일치) 요청 메시지의 호스트 헤더와 일치
$ sent_http_name: $ sent_content_type 과 같은 응답 메시지의 지정된 헤더와 일치합니다. 응답 메시지의 콘텐츠 유형 헤더와 일치합니다
$status: 응답 상태

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

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