Nginx基本概念:
一个高性能HTTP和反向代理web服务器,专为性能优化而开发。
**反向代理:**我么只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
正向代理:把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
负载均衡:单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是负载均衡。
**动静分离:**为了加快网站的解析速度,可以把动态页面和静态页面有不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
Nginx操作的常用命令:
**查看nginx版本号:**nginx -v
**启动nginx:**nginx
**关闭nginx:**nginx -s stop
**重新加载命令:**nginx -s reload
Nginx配置文件:
/etc/nginx/nginx.conf
第一部分:全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
第二部分:event块
events块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接受多个网络连接,选取哪种事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等。
1 2 3
| events { worker_connections 1024; }
|
支持的最大连接数。
第三部分:http块
是Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
http块也可以包括http全局块和server块。
**server块:**这和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的忏悔说呢过是为了节省互联网服务器硬件成本。
每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。
而每个server块也分为全局server块,以及可以同时包含多个location块。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| server { listen 80 default_server; listen [::]:80 default_server; server_name root /usr/share/nginx/html; default_type 'text/html'; charset utf-8;
include /etc/nginx/default.d/*.conf;
location / { index index.html index.php index.htm; charset utf-8; }
error_page 404 /404.html; location = /40x.html { }
error_page 500 502 503 504 /50x.html; location = /50x.html { } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
|
详解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308
| user www www;
worker_processes 4;
worker_rlimit_nofile 65535;
events { use epoll worker_connections 1024; keepalive_timeout 60; client_header_buffer_size 4k; open_file_cache max=65535 inactive=60s; open_file_cache_valid 80s; open_file_cache_min_uses 1; open_file_cache_errors on; }
http{ include mime.types; default_type application/octet-stream; charset utf-8; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 64k; client_max_body_size 8m; sendfile on; autoindex on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 120; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on;
upstream piao.jd.com { server 192.168.80.121:80 weight=3; server 192.168.80.122:80 weight=2; server 192.168.80.123:80 weight=3;
} server { listen 80;
server_name www.jd.com jd.com; index index.html index.htm index.php; root /data/www/jd;
location ~ .*.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; } location ~ .*.(js|css)?$ { expires 1h; } log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /usr/local/nginx/logs/host.access.log main; access_log /usr/local/nginx/logs/host.access.404.log log404; location /connect-controller { proxy_pass http://127.0.0.1:88; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_intercept_errors on;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k; } location ~ .(jsp|jspx|do)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080; } } }
|
Nginx配置实例-反向代理
在Nginx配置文件中将location中的位置改为所要展示的页面的绝对地址,或者使用proxy_pass改为所要跳转的端口。
Nginx配置实例-负载均衡
**实现效果:**浏览器地址栏输入地址,负载均衡效果,平均到8080和8081端口中。
在nginx配置文件中进行负载均衡的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| http{ ...... upstream myserver{ ip_hash; server 115.28.52.63:8080 weight=1; server 115.28.52.63:8081 weight=1; fair; } server{ location/{ ...... proxy_pass http://myserver; proxy_connect_timeout 10; } } }
|
Nginx提供了几种分配方式(策略):
1.轮询(默认):
每个请求按时间顺序逐一分配到不同的的后端服务器,如果后端服务器宕机,能自动剔除。
2.weight:
weight代表权重,默认为1,权重越高被分配的客户端越多。
3.ip_hash:
每个请求按访问ip的hash的结果分配,这样每一个访客固定访问一个后端服务器,可以解决session问题。
4.fair(第三方):
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
Nginx配置实例-动静分离
Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求和静态请求分开。动静分离从目前实现角度来讲大致分为两种:
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案。
另外一种方法就是把动态和静态页面混合在一起发布,通过nginx来分开。
在配置文件中进行分离配置:
1 2 3 4 5 6 7 8 9
| location /www/ { root /data/; index index.html index.htm; }
location /image/ { root /data/; autoindex on; }
|
Nginx配置实例-高可用
**高可用:**需要多台nginx服务器(防止nginx宕机),需安装keepalived
1
| yum install keepalived -y
|
在/etc里面生成目录keepalived,有配置文件keepalived.conf
在/usr/local/src添加检测脚本文件。