在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Nginx(engine X) 是一个高性能的 HTTP 服务器和反向代理服务器,这款软件开发的目的是为了解决 C10k 问题。 Nginx 的架构利用了许多现代操作系统的特性,以实现一个高性能的 HTTP 服务器。例如在 Linux 系统上,Nginx 使用了 epoll,sendfile,File AIO,DIRECTIO 等机制,使得 Nginx 不仅性能高效,而且资源占用率非常低,官方宣称 nginx 维持 10000 个非活动的 HTTP keep-alive 连接仅需要 2.5M 内存。 1. 安装 nginx 还可以使用一些二次开发功能增强的 nginx 版本,例如淘宝的 Tengine 和 OpenResty 都是不错的选择。 1.1 常用编译参数 --prefix=PATH:指定 nginx 的安装目录 --prefix=/usr/local/nginx \ 启动 nginx: # nginx -c /etc/nginx/nginx.conf
# nginx -s stop
# nginx -s reload # pkill -HUP nginx
# nginx -s reopen # pkill -USR1 nginx
# service nginx {start|stop|status|restart|reload|configtest|}
Nginx 配置文件主要分成四部分:main(全局设置)、http(HTTP 的通用设置)、server(虚拟主机设置)、location(匹配 URL 路径)。还有一些其他的配置段,如 event,upstream 等。 2.1 通用设置 user nginx worker_rlimit_nofile # worker_cpu_affinity worker_processes 4 worker_connections 1000 error_log logs/error.log info use epoll 2.2 http 服务器 server {}: listen 80; server_name NAME [...]; sendfile on keepalive_timeout 65 send_timeout client_max_body_size 10m root PATH location [ = | ~ | ~* | ^~ ] URI { ... } allow 和 deny 仅允许 192.168.0.0/24 网段客户端访问 allow 192.168.0.0/24; location /status { stub_status on; allow 172.16.0.0/16; deny all; }
rewrite ^/images/(.*\.jpg)$ /imgs/$1 break; 一个 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; }
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;; }
ningx 还可以使用这些算法: ip_hash:基于源地址哈希,主要目的是会话保持 例如,基于 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; }
如果代理指定的是一个 URI 地址,如 http://127.0.0.1/remote,那么将直接被代理至指定 URI,无论请求的 URI 是什么 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 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_valid any 1m;
proxy_cache_method GET; proxy_cache_method HEAD;
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; }
$arg_name:请求 uri 中的 name 参数至 |
请发表评论