Nginx 高性能Web服务器
简介
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫开发的。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
选择Nginx的理由
- 高并发连接 官方测试Nginx能够支持5万并发连接,在实际生产环境中可以支持2-4万并发连接
- 消耗内存少 在同等硬件环境下, Nginx的处理能力相当于Apache的5-10倍。
- 成本低廉 Nginx作为开源软件,可以免费使用,并且可用于商业用途。
- 其他理由
- 配置文件非常简单
- 支持Rewrite重写规则
- 内置健康检查规则
- 节省带宽
- 稳定性高
- …
Nginx安装与配置
Nginx安装前准备
-
L
- gcc编译器:用于官方源码编译, 依赖于gcc环境。
- 依赖模块:Nginx的一些模块需要第三方库支持。
- 下载地址: http://nginx.org/en/download.html
yum -y install gcc gcc-c++ autoconf automake yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel wget -0 /tmp/nginx.tar.gz http://nginx.org/download/nginx-1.16.1.tar.gz
Nginx编译安装
-
Nginx编译安装步骤:
# 解压 tar -zxvf /tmp/nginx.tar.gz cd /tmp/nginx-1.16.1/ # 配置安装路径 ./configure --prefix=/usr/local/nginx make make install
-
添加环境变量
vim /etc/profile
在profile文件末尾添加如下配置:
#设置Nginx的环境变量
NGINX_HOME=/usr/local/nginx export
PATH=$PATH:$NGINX_HOME/sbin开启Nginx服务:
nginx
关闭Nginx服务:
nginx -s stop
-
开启防火墙
#查看开放的端口 firewall-cmd --zone=public --list-port #永久添加80端口到防火墙 firewall-cmd --zone=public --add-port=80/tcp --permanent #重新加载 firewall-cmd --reload #重新加载配置文件 nginx -s reload # 检测配置文件 nginx -t
-
添加系统服务
在/usr/lib/systemd/system 下添加nginx.service,可以设置开机启动[Unit] Description=nginx - high performance web server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop ExecQuit=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
#重新加载systemctl daemon systemctl daemon-reload systemctl start nginx.service #设置开机启动 systemctl enable nginx
Nginx配置与优化
-
配置文件结构
-
虚拟主机配置
-
日志配置与切割
-
压缩输出配置
-
…
#检测 nginx -t #重新加载 nginx -s reload
默认配置文件位置: /usr/local/nginx/conf
#使用的用户和组 #user nobody; #指定工作进程 worker_processes 1; #指定错误日志存放路径 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #指定nginx使用的pid #pid logs/nginx.pid; #允许的最大连接数 events { worker_connections 1024; } #这个是协议级别 http { #依据请求文件的后缀名在服务器的MIME配置文件中找到对应的MIME Type,再根据MIME Type设置HTTP Response的Content-Type,然后浏览器根据Content-Type的值处理文件。 include mime.types; #默认处理程序 default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #设置日志格式 log_format mylogformat '$http_x_forwarded_for - $remote_user [$time_local]'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; gzip on; gzip_min_length 1k; gzip_buffer 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml #这个是服务器级别 server { #端口 listen 80; #主机名/域名 server_name test.domain.com; #字符集 charset utf-8; # 使用设置的log格式 access_log logs/test.domain.access.log mylogformat; #这个是请求级别 通过指定模式来与客户端请求的URI相匹配 location / { root html/test.domain.com; index index.html index.htm; } } }
Nginx高级应用
- Rewrite 重写
- Rewrite主要功能就是实现URL重写
- 通过Rewrite规则,可以实现规范的URL
server{ location / { rewrite ^(.*).htmp$ /rewrite.html } }
- 反向代理及负载均衡
- 反向代理
指以代理服务器来接收Internet上的连接请求,然后将请求转发给网络上的服务器,并将从服务器得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外表现为一个服务器。
http { include mime.types; #默认处理程序 default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream myserver { server www.baidu.com } #这个是服务器级别 server { #端口 listen 80; #主机名/域名 server_name test.domain.com; #字符集 charset utf-8; # 使用设置的log格式 access_log logs/test.domain.access.log mylogformat; #这个是请求级别 通过指定模式来与客户端请求的URI相匹配 location / { #代理服务:当访问test.domain.com域名时,跳转到myserver指定的域名:www.baidu.com proxy_pass http://myserver; index index.html index.htm; } } }
- 负载均衡
由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无需其他服务器的辅助。
http { include mime.types; #默认处理程序 default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream myserver1 { server 192.168.1.1:8081; } upstream myserver2 { server 192.168.1.1:8080; } #一个server对应多个ip,在访问时分别访问两个ip upstream myserver { server 192.168.1.1:8080; server 192.168.1.1:8081; } #这个是服务器级别 server { #端口 listen 80; #主机名/域名 server_name test.domain.com; #字符集 charset utf-8; # 使用设置的log格式 access_log logs/test.domain.access.log mylogformat; #这个是请求级别 通过指定模式来与客户端请求的URI相匹配 location / { #使用负载服务 proxy_pass http://myserver ; index index.html index.htm; } } }
- 反向代理