>운영 및 유지보수 >엔진스 >nginx 빠른 시작

nginx 빠른 시작

王林
王林앞으로
2021-01-27 10:12:455242검색

nginx 빠른 시작

nginx 간략한 소개:

(동영상 공유 학습: 프로그래밍 입문)

Nginx(엔진 x)는 경량 웹 서버, 역방향 프록시 서버 및 이메일(IMAP/POP3) 프록시 서버입니다. Rambler Media에서 근무하면서 러시아 출신의 Igor Sysoev가 C로 개발했습니다.

Igor Sysoev는 Nginx 코드를 오픈 소스로 제공하고 가장 자유로운 2절 BSD와 유사한 라이센스를 제공했습니다. Nginx는 수백만 개의 TCP 연결을 동시에 처리할 수 있는 이벤트 중심 아키텍처를 사용하기 때문에 고도로 모듈화된 설계와 무료 라이센스를 통해 타사 모듈이 Nginx 기능을 확장하여 끝없는 스트림으로 나타날 수 있으며 우수한 설계는 탁월한 안정성을 제공합니다. 트래픽이 많은 웹사이트의 웹 서버로 널리 사용됩니다.

역방향 프록시 방식이란 프록시 서버를 사용하여 인터넷에서 연결 요청을 수락한 다음 해당 요청을 내부 네트워크의 서버로 전달하고 서버에서 얻은 결과를 연결을 요청한 사람에게 반환하는 것을 말합니다. 인터넷 클라이언트, 이때 프록시 서버는 외부 세계에 역방향 프록시 서버로 나타납니다.

역방향 프록시가 있듯이 순방향 프록시도 있습니다. 전달 프록시는 클라이언트와 원본 서버 사이의 서버로, 클라이언트는 원본 서버에서 콘텐츠를 얻기 위해 프록시에 요청을 보내고 대상을 지정합니다. 그런 다음 프록시는 요청을 원본 서버에 전달하고 반환합니다. 클라이언트에게 콘텐츠를 얻었습니다.

순방향 프록시는 클라이언트를 나타내고 역방향 프록시는 서버를 나타낸다고 할 수 있습니다.

nginx 빠른 시작

Nginx를 사용하면 다음과 같은 장점이 있습니다.

nginx 빠른 시작

종속 라이브러리

요즘 서버는 일반적으로 Nginx를 컴파일하고 설치하기 전에 해당 라이브러리를 설치해야 합니다.

다음은 웹 서버의 가장 기본적인 기능을 완료하는 데 필요한 여러 라이브러리 목록입니다.

GCC

GCC(GNU Compiler Collection)는 C 언어 프로그램을 컴파일하는 데 사용할 수 있습니다.

Nginx는 일반적으로 바이너리 실행 프로그램을 직접 제공하지 않으므로 소스 코드를 컴파일해야 합니다.

C++를 사용하여 Nginx HTTP 모듈을 작성한 다음 G++ 컴파일러를 사용해야 합니다.

yum을 사용하여 G++ 컴파일러 설치:

yum install -y gcc-c++

PCRE

PCRE 라이브러리 PCRE(Perl 호환 정규 표현식, Perl 호환 정규 표현식)는 Philip Hazel이 개발한 함수 라이브러리로 현재 많은 소프트웨어에서 사용됩니다. 정규식. 실제로 Perl 정규식은 Henry Spencer가 작성한 RegEx에서 유래되었습니다.

구성 파일 nginx.conf에서 정규식을 사용하는 경우 Nginx를 컴파일할 때 PCRE 라이브러리를 Nginx로 컴파일해야 합니다. 왜냐하면 Nginx의 HTTP 모듈은 이를 사용하여 정규식을 구문 분석하기 때문입니다.

물론, 정규식을 사용하지 않을 것이라고 확인했다면 설치할 필요는 없습니다.

yum 설치 방법은 다음과 같습니다.

yum install -y pcre pcre-devel

pcre-devel은 Nginx 컴파일에도 필요한 헤더파일 등 PCRE를 이용한 2차 개발에 필요한 개발 라이브러리입니다.

zlib 라이브러리

zlib 라이브러리는 nginx.conf에서 gzip을 구성하고 특정 유형의 (콘텐츠 유형) HTTP 응답에 gzip을 사용하도록 지정하는 경우 HTTP 패킷의 내용을 gzip 형식으로 압축하는 데 사용됩니다. 네트워크 전송량을 줄이기 위해 압축하려면 컴파일 중에 zlib를 Nginx로 컴파일해야 합니다.

yum 설치 방법은 다음과 같습니다

yum install -y zlib zlib-devel

마찬가지로 zlib는 직접 사용하기 위한 라이브러리이고, zlib-devel은 2차 개발에 필요한 라이브러리입니다.

OpenSSL 개발 라이브러리

서버가 HTTP를 지원할 뿐만 아니라 보다 안전한 SSL 프로토콜로 HTTP를 전송해야 한다면 OpenSSL이 필요합니다.

또한 MD5, SHA1 등의 해시 함수를 사용하려면 해당 기능도 설치해야 합니다.

yum 설치 방법은 다음과 같습니다:

yum install -y openssl openssl-devel

소스 코드 패키지 다운로드

Nginx 공식 사이트의 다운로드 인터페이스에 들어가서 최신 안정 버전을 선택하세요.

그런 다음 wget 명령을 사용하여 다운로드합니다.

[root@host nginx]# wget http://nginx.org/download/nginx-1.16.0.tar.gz
--2019-05-23 03:28:52--  http://nginx.org/download/nginx-1.16.0.tar.gz
Resolving nginx.org... 62.210.92.35, 95.211.80.227, 2001:1af8:4060:a004:21::e3
Connecting to nginx.org|62.210.92.35|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1032345 (1008K) [application/octet-stream]
Saving to: “nginx-1.16.0.tar.gz”

100%[==========================================================================================================================================>] 1,032,345    715K/s   in 1.4s    

2019-05-23 03:28:53 (715 KB/s) - “nginx-1.16.0.tar.gz” saved [1032345/1032345]

파일 압축 풀기:

[root@host nginx]# tar xf nginx-1.16.0.tar.gz 
[root@host nginx]# ls
nginx-1.16.0  nginx-1.16.0.tar.gz
[root@host nginx]# cd nginx-1.16.0
[root@host nginx-1.16.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

컴파일 및 설치

다음 세 가지 명령을 사용하여 Nginx를 컴파일 및 설치합니다.

./configure make make install

의존하는 라이브러리를 찾을 수 없는 경우 다음을 실행합니다. ./configure 명령 때때로 오류가 보고됩니다(예: PCRE 라이브러리를 찾을 수 없음):

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

정상 출력은 다음과 같아야 하며 Makefile이 생성됩니다:

[root@host nginx-1.16.0]# ./configure
checking for OS
 + Linux 4.10.4-1.el6.elrepo.i686 i686
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) 
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for gcc builtin 64 bit byteswap ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... found
checking for EPOLLRDHUP ... found
checking for EPOLLEXCLUSIVE ... not found
checking for O_PATH ... not found
checking for sendfile() ... found
checking for sendfile64() ... found
checking for sys/prctl.h ... found
checking for prctl(PR_SET_DUMPABLE) ... found
checking for prctl(PR_SET_KEEPCAPS) ... found
checking for capabilities ... found
checking for crypt_r() ... found
checking for sys/vfs.h ... found
checking for nobody group ... found
checking for poll() ... found
checking for /dev/poll ... not found
checking for kqueue ... not found
checking for crypt() ... not found
checking for crypt() in libcrypt ... found
checking for F_READAHEAD ... not found
checking for posix_fadvise() ... found
checking for O_DIRECT ... found
checking for F_NOCACHE ... not found
checking for directio() ... not found
checking for statfs() ... found
checking for statvfs() ... found
checking for dlopen() ... not found
checking for dlopen() in libdl ... found
checking for sched_yield() ... found
checking for sched_setaffinity() ... found
checking for SO_SETFIB ... not found
checking for SO_REUSEPORT ... found
checking for SO_ACCEPTFILTER ... not found
checking for SO_BINDANY ... not found
checking for IP_TRANSPARENT ... found
checking for IP_BINDANY ... not found
checking for IP_BIND_ADDRESS_NO_PORT ... not found
checking for IP_RECVDSTADDR ... not found
checking for IP_SENDSRCADDR ... not found
checking for IP_PKTINFO ... found
checking for IPV6_RECVPKTINFO ... found
checking for TCP_DEFER_ACCEPT ... found
checking for TCP_KEEPIDLE ... found
checking for TCP_FASTOPEN ... not found
checking for TCP_INFO ... found
checking for accept4() ... found
checking for eventfd() ... found
checking for int size ... 4 bytes
checking for long size ... 4 bytes
checking for long long size ... 8 bytes
checking for void * size ... 4 bytes
checking for uint32_t ... found
checking for uint64_t ... found
checking for sig_atomic_t ... found
checking for sig_atomic_t size ... 4 bytes
checking for socklen_t ... found
checking for in_addr_t ... found
checking for in_port_t ... found
checking for rlim_t ... found
checking for uintptr_t ... uintptr_t found
checking for system byte ordering ... little endian
checking for size_t size ... 4 bytes
checking for off_t size ... 8 bytes
checking for time_t size ... 4 bytes
checking for AF_INET6 ... found
checking for setproctitle() ... not found
checking for pread() ... found
checking for pwrite() ... found
checking for pwritev() ... found
checking for sys_nerr ... found
checking for localtime_r() ... found
checking for clock_gettime(CLOCK_MONOTONIC) ... not found
checking for clock_gettime(CLOCK_MONOTONIC) in librt ... found
checking for posix_memalign() ... found
checking for memalign() ... found
checking for mmap(MAP_ANON|MAP_SHARED) ... found
checking for mmap("/dev/zero", MAP_SHARED) ... found
checking for System V shared memory ... found
checking for POSIX semaphores ... not found
checking for POSIX semaphores in libpthread ... found
checking for struct msghdr.msg_control ... found
checking for ioctl(FIONBIO) ... found
checking for struct tm.tm_gmtoff ... found
checking for struct dirent.d_namlen ... not found
checking for struct dirent.d_type ... found
checking for sysconf(_SC_NPROCESSORS_ONLN) ... found
checking for sysconf(_SC_LEVEL1_DCACHE_LINESIZE) ... found
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
checking for PCRE library ... found
checking for PCRE JIT support ... not found
checking for zlib library ... found
creating objs/Makefile

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

Nginx 버전 확인

설치 후 성공하면 -v 매개변수를 통해 Nginx 버전을 확인할 수 있습니다.

[root@host sbin]# /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.16.0

Startup

Nginx는 직접 시작과 매개변수를 사용한 시작을 지원합니다.

포트 점유

Nginx는 포트 80을 사용해야 합니다. 포트 80이 사용 중이면 시작 시 다음 오류가 보고됩니다.

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

lsof 도구를 사용하여 포트 점유를 확인할 수 있습니다. 다음 명령을 사용하여 설치할 수 있습니다.

yum install -y lsof

이 시스템에서 포트 80의 사용량을 확인하고 사용 중인 프로세스를 종료합니다.

[root@host sbin]# lsof -i :80
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    1765 root   53u  IPv6  15062      0t0  TCP *:http (LISTEN)
[root@host sbin]# killall -9 java
[root@host sbin]# lsof -i :80
[root@host sbin]#

기본적으로 시작

使用whereis命令查看nginx的安装目录:

[root@host nginx-1.16.0]# whereis nginx
nginx: /usr/local/nginx

如果不加任何参数启动,会使用默认的nginx.conf配置文件启动Nginx:

/usr/local/nginx/sbin/nginx

启动成功以后,再请求服务器的时候可以看到包含下面内容的网页:

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

带参数启动

-c参数指定配置文件的启动方式:

./nginx -c mynginx.conf

-p参数指定Nginx的安装目录:

./nginx -p mydir/nginx

-g参数临时指定一些全局配置项

./nginx -g "pid varnginx/test.pid;"

上面这行命令意味着会把pid文件写到varnginx/test.pid中。

-g参数的约束条件是指定的配置项不能与默认路径下的nginx.conf中的配置项相冲突,否则无法启动。

就像上例那样,类似这样的配置项:pid logs/nginx.pid,是不能存在于默认的nginx.conf中的。

另一个约束条件是,以-g方式启动的Nginx服务执行其他命令行时,需要把-g参数也带上,否则可能出现配置项不匹配的情形。

在不启动Nginx的情况下,使用-t参数仅测试配置文件是否有错误。 例如:

./nginx -t

执行结果中显示配置是否正确。

[root@host sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

测试配置选项时,使用-q参数可以不把error级别以下的信息输出到屏幕。 例如:

./nginx -t -q

停止服务

停止Nginx的服务主要有两种方式。

一种是快速停止,即立即停止Nginx服务正在处理的所有网络请求,马上丢弃连接停止服务。

另外一种是平缓地停止,即允许Nginx处理完当前的请求,但不再接收新的请求,之后再关闭连接,停止工作。

快速停止服务

/usr/local/nginx/sbin/nginx -s stop

kill服务

kill -s SIGTERM 进程ID或kill -s SIGINT 进程ID与上面./nginx -s stop命令的效果是一样的。

[root@host sbin]# ps -ef|grep nginx 
root     10568     1  0 04:22 ?        00:00:00 nginx: master process ./nginx
nobody   10569 10568  0 04:22 ?        00:00:00 nginx: worker process
root     10571  5440  0 04:23 pts/1    00:00:00 grep nginx
[root@host sbin]# kill -s SIGINT 10568
[root@host sbin]# ps -ef|grep nginx 
root     10574  5440  0 04:24 pts/1    00:00:00 grep nginx
[root@host sbin]#

优雅地停止服务

如果希望Nginx服务可以正常地处理完当前所有请求再停止服务,那么可以使用-s quit参数来停止服务。

例如:

./nginx -s quit

该命令与快速停止Nginx服务是有区别的。

当快速停止服务时,worker进程与master进程在收到信号后会立刻跳出循环,退出进程。

而“优雅”地停止服务时,首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。

与快速停止服务相似,可以直接发送QUIT信号给master进程来停止服务,其效果与执行-s quit命令是一样的。

例如:

kill -s SIGQUIT <nginx master pid>

如果希望“优雅”地停止某个worker进程,那么可以通过向该进程发送WINCH信号来停止服务 。

例如:

kill -s SIGWINCH <nginx worker pid>

发送信号

./nginx -g TERM | INT | QUIT

TERM 和 INT 信号用于快速停止,QUIT 信号用于平滑停止。

Nginx重新加载配置

使运行中的Nginx重读配置项并生效

使用-s reload参数可以使运行中的Nginx服务重新加载nginx.conf文件。 例如:

usrlocal/nginx/sbin/nginx -s reload

日志文件回滚

使用-s reopen参数可以重新打开日志文件,这样可以先把当前日志文件改名或转移到其他目录中进行备份,再重新打开时就会生成新的日志文件。

这个功能使得日志文件不至于过大。 例如:

./nginx -s reopen

这与使用kill命令发送USR1信号效果相同。

kill -s SIGUSR1 <nginx master pid>

相关推荐:nginx教程

위 내용은 nginx 빠른 시작의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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