nginx の簡単な紹介:
(学習ビデオ共有: プログラミング入門 )
Nginx (エンジン x)は、軽量 Web サーバー、リバース プロキシ サーバー、および電子メール (IMAP/POP3) プロキシ サーバーです。これは、Rambler Media に勤務していたロシアの Igor Sysoev によって C で開発されました。
Igor Sysoev は Nginx コードをオープンソース化し、最も無料な 2 条項の BSD のようなライセンスを付与しました。 Nginx は、数百万の TCP 接続を同時に処理できるイベント駆動型のアーキテクチャを使用しているため、その高度なモジュール設計と無料のライセンスにより、Nginx の機能を拡張するサードパーティ モジュールの無限の出現につながり、優れた設計は優れた安定性をもたらします。トラフィックの多い Web サイトの Web サーバーとして広く使用されています。
いわゆるリバース プロキシ (リバース プロキシ) 方式とは、プロキシ サーバーを使用してインターネット上の接続要求を受け付け、その要求を内部ネットワーク上のサーバーに転送し、プロキシ サーバーから得られた結果を返すことを指します。インターネットへのサーバー クライアントが接続を要求すると、プロキシ サーバーは外部に対してリバース プロキシ サーバーとして表示されます。
リバース プロキシがあるため、フォワード プロキシもあります。フォワード プロキシは、クライアントと元のサーバーの間にあるサーバーです。元のサーバーからコンテンツを取得するために、クライアントはプロキシにリクエストを送信し、ターゲットを指定します。その後、プロキシはそのリクエストを元のサーバーに転送し、取得したコンテンツをクライアントに送信します。
フォワード プロキシはクライアントを表し、リバース プロキシはサーバーを表すと言えます。
Nginx を使用すると、次の利点があります:
依存ライブラリ
現在、サーバーは一般に Linux を使用します。オペレーティング システムでは、Nginx をコンパイルしてインストールする前に、その依存ライブラリをインストールする必要があります。
次に、Web サーバーの最も基本的な機能を実行するために必要ないくつかのライブラリをリストします。
GCC
GCC (GNU Compiler Collection) は、C 言語プログラムをコンパイルするために使用できます。
Nginx は通常、バイナリ実行可能プログラムを直接提供しないため、ソース コードをコンパイルする必要があります。
C を使用して Nginx HTTP モジュールを作成する場合は、G コンパイラを使用する必要があります。
Use yum to install the G Compiler:
yum install -y gcc-c++
PCRE
PCRE ライブラリ PCRE (Perl 互換正規表現、Perl 互換正規表現) は、Philip Hazel によって開発された関数ライブラリです。 , 現在多くのソフトウェアで使用されているこのライブラリは正規表現をサポートしています。 RegEx から発展したものであり、実際、Perl 正規表現も Henry Spencer によって書かれた RegEx に由来しています。
設定ファイル nginx.conf で正規表現を使用する場合、Nginx のコンパイル時に PCRE ライブラリを Nginx にコンパイルする必要があります。これは、Nginx の HTTP モジュールが正規表現の解析に PCRE ライブラリに依存しているためです。
もちろん、正規表現を使用しないことが確認できた場合はインストールする必要はありません。
yum のインストール方法は以下のとおりです。
yum install -y pcre pcre-devel
pcre-devel は、PCRE を使用した二次開発に必要なヘッダファイルなどを含む開発ライブラリで、Nginx のコンパイルにも必要です。
zlib ライブラリ
zlib ライブラリは、HTTP パケットのコンテンツを gzip 形式で圧縮するために使用されます。nginx.conf で gzip を構成し、特定のタイプ (コンテンツ タイプ) にそれを指定すると、 ) HTTP 応答は、ネットワーク送信量を削減するために圧縮に gzip を使用するため、コンパイル中に zlib を Nginx にコンパイルする必要があります。
yumのインストール方法は以下のとおりです
yum install -y zlib zlib-devel
同様にzlibは直接利用するライブラリ、zlib-develは二次開発に必要なライブラリです。
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
コンパイルしてインストールします
次の 3 つのコマンドを使用して 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.
:
[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"
Check Nginx version
インストールが成功したら、-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 中国語 Web サイトの他の関連記事を参照してください。