Nginx服务器搭建和基本配置详解
Nginx服务器搭建和基本配置详解Nginx(engine X) 是⼀个⾼性能的 HTTP 服务器和反向代理服务器,这款软件开发的⽬的是为了解决 C10k 问题。
Nginx 的架构利⽤了许多现代操作系统的特性,以实现⼀个⾼性能的 HTTP 服务器。例如在Linux 系统上,Nginx 使⽤了 epoll,sendfile,File AIO,DIRECTIO 等机制,使得 Nginx 不仅性能⾼效,⽽且资源占⽤率⾮常低,官⽅宣称 nginx 维持 10000 个⾮活动的 HTTP keep-alive 连接仅需要 2.5M 内存。
Nginx会按需同时运⾏多个进程:⼀个主进程(master)和⼏个⼯作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有⼀个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以 root ⽤户⾝份运⾏,⽽worker、cache loader 和 cache manager 均应以⾮特权⽤户⾝份运⾏。
1. 安装 nginx
在 CentOS6 版本的 EPEL 源中,已经加⼊了 nginx 的 rpm 包,不过此 RPM 包版本较低。如果需要更新版本,可以使⽤官⽅制作的 rpm 包,或者使⽤源码包编译安装。
还可以使⽤⼀些⼆次开发功能增强的 nginx 版本,例如淘宝的 Tengine 和 OpenResty 都是不错的选择。
1.1 常⽤编译参数
--prefix=PATH:指定 nginx 的安装⽬录
--conf-path=PATH:指定 f 配置⽂件路径
--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:启⽤ File AIO
--add-module=PATH:添加第三⽅外部模块
这⾥提供⼀个完整的编译⽅案:
--prefix=/usr/local/nginx \
-
-conf-path=/etc/f \
--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/proxy \
--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
1# nginx -c /etc/f 1# nginx -s stop ? ?
重读配置⽂件
重新打开⽇志⽂件
还可以下载 nginx RPM 包中的 /etc/init.d/nginx ⽂件,修改路径后即可使⽤:
2. f 配置⽂件
Nginx 配置⽂件主要分成四部分:main (全局设置)、http (HTTP 的通⽤设置)、server (虚拟主机设置)、location (匹配 URL 路径)。还有⼀些其他的配置段,如 event ,upstream 等。2.1 通⽤设置
user nginx
指定运⾏ nginx workre 进程的⽤户和组worker_rlimit_nofile #
指定所有 worker 进程能够打开的最⼤⽂件数
worker_cpu_affinity
设置 worker 进程的 CPU 粘性,以避免进程在 CPU 间切换带来的性能消耗。如worker_cpu_affinity 0001 0010 0100 1000;(四核)
worker_processes 4
worker ⼯作进程的个数,这个值可以设置为与 CPU 数量相同,如果开启了 SSL 和 Gzip ,那么可以适当增加此数值
worker_connections 1000
单个 worker 进程能接受的最⼤并发连接数,放在 event 段中error_log logs/error.log info
错误⽇志的存放路径和记录级别use epoll
使⽤ epoll 事件模型,放在 event 段中2.2 http 服务器server {}:
定义⼀个虚拟主机
listen 80;
定义监听的地址和端⼝,默认监听在本机所有地址上
server_name NAME [...];
定义虚拟主机名,可以使⽤多个名称,还可以使⽤正则表达式或通配符。sendfile on
开启 sendfile 调⽤来快速的响应客户端keepalive_timeout 65
长连接超时时间,单位是秒。send_timeout
12
# nginx -s reload # pkill -HUP nginx
12
# nginx -s reopen # pkill -USR1 nginx
1
# service nginx {start|stop|status|restart|reload|configtest|}
指定响应客户端的超时时间client_max_body_size 10m 允许客户端请求的实体最⼤⼤⼩
root PATH
设置请求 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 中:开启状态显式页⾯
rewrite <REGEX> <REPL> <FLAG>URL 重写,可以使⽤多种标记例如:
rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;可⽤的 flag :
- last :重写完成后,继续匹配其他 rewrite 规则- break :重写完成后不再继续匹配
-
redirect :返回 302 重定向(临时重定向),客户端对重定向的 URL 发起新的请求- permanent :返回 301 重定向(永久重定向),客户端对重定向的 URL 发起新的请求⼀个 server 配置⽰例:
2.3 SSL 的配置
12345
location /status {stub_status on;
代理服务器的设置allow 172.16.0.0/16;deny all;}
123456789101112131415
server { listen  80;
server_ample; 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;}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。