赞
踩
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
说白了nginx就是一款轻量级的服务器,我们通过修改其配置文件,就可以轻松的进行服务器的管理。
安装:官网- 注意安装后要修改登录身份
配置文件地址:/etc/nginx/nginx.config,注意配置文件中要添加分号。
启动:nginx
日志地址:/var/log/nginx/error.log;
当nginx启动后,可以使用“-s”参数向nginx管理进程发送信号来控制nginx:
nginx -s signal
其中,signal可以是以下值:
语法规则: location [=||*|^~] /uri/ { … }
多个location配置的情况下匹配顺序为:首先精确匹配 =-》其次以xx开头匹配^~-》然后是按文件中顺序的正则匹配-》最后是交给 / 通用匹配。
当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
例子,有如下匹配规则:
location = / { #规则A } location = /login { #规则B } location ^~ /static/ { #规则C } location ~ \.(gif|jpg|png|js|css)$ { #规则D,注意:是根据括号内的大小写进行匹配。括号内全是小写,只匹配小写 } location ~* \.png$ { #规则E } location !~ \.xhtml$ { #规则F } location !~* \.xhtml$ { #规则G } location / { #规则H } 那么产生的效果如下: 访问根目录/, 比如http://localhost/ 将匹配规则A 访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H 访问 http://localhost/static/a.html 将匹配规则C 访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用, 而 http://localhost/static/c.png 则优先匹配到 规则C 访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。 访问 http://localhost/a.xhtml 不会匹配规则F和规则G, http://localhost/a.XHTML不会匹配规则G,(因为!)。规则F,规则G属于排除法,符合匹配规则也不会匹配到,所以想想看实际应用中哪里会用到。
location /ttms/ {
root /root/;
autoindex on;
}
注意文件目录,与location之间关系。nginx会将ttms作为请求识别,ttms之后的内容为具体的uri,根路径为root设置的路径。
server { listen 443 ssl; listen [::]:443 ssl; server_name _; root /usr/share/nginx/html; ssl_certificate "证书"; ssl_certificate_key "秘钥"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { }
upstream taishan { server 132.232.169.227:1789 weight=2; server 132.232.169.227:2789 weight=1; } #配置在http中 proxy_pass http://taishan;#请求转向taishan定义的服务器列表 proxy_set_header Host $host;#将请求头转发给后端服务器 proxy_set_header X-Forward-For $remote_addr;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP #其他相关配置入下,可以根据需要添加配置 #client_max_body_size 10m;#允许客户端请求的最大单文件字节数 #client_body_buffer_size 128k;#缓冲区代理缓冲用户端请求的最大字节数 #proxy_connect_timeout 90;#nginx跟后端服务器连接超时时间(代理连接超时) #proxy_send_timeout 90;#后端服务器数据回传时间(代理发送超时) #proxy_read_timeout 90;#连接成功后,后端服务器响应时间(代理接收超时) #proxy_buffer_size 4k;#设置代理服务器(nginx)保存用户头信息的缓冲区大小 #proxy_buffers 4 32k;#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 #proxy_busy_buffers_size 64k;#高负荷下缓冲大小(proxy_buffers*2) #proxy_temp_file_write_size 64k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传 # root html; # index index.php index.html index.htm;
location /ttmsOperation/ {
proxy_pass http://132.232.169.227:510;
}
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
}
服务器默认是不被允许跨域的。给Nginx服务器配置Access-Control-Allow-Origin *
后,表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求。
Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
这个错误表示当前请求Content-Type的值不被支持。其实是我们发起了"application/json"的类型请求导致的。这里涉及到一个概念:预检请求(preflight request)
,请看下面"预检请求"的介绍。
Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
OPTIONS
添加 204
的返回,是为了处理在发送POST请求时Nginx依然拒绝访问的错误发送"预检请求"时,需要用到方法 OPTIONS
,所以服务器需要允许该方法。
其实上面的配置涉及到了一个W3C标准:CROS
,全称是跨域资源共享 (Cross-origin resource sharing),它的提出就是为了解决跨域请求的。
跨域资源共享(CORS)标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站有权限访问哪些资源。另外,规范要求,
对那些可能对服务器数据产生副作用的HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求)
,浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。
其实Content-Type字段的类型为application/json
的请求就是上面所说的搭配某些 MIME 类型的 POST 请求
,CORS规定,Content-Type不属于以下MIME类型的,都属于预检请求:
application/x-www-form-urlencoded
multipart/form-data
text/plain
所以 application/json的请求 会在正式通信之前,增加一次"预检"请求,这次"预检"请求会带上头部信息 Access-Control-Request-Headers: Content-Type
:
OPTIONS /api/test HTTP/1.1
Origin: http://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type
… 省略了一些
服务器回应时,返回的头部信息如果不包含Access-Control-Allow-Headers: Content-Type
则表示不接受非默认的的Content-Type。即出现以下错误:
Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
当页面资源较大时,需要减小网络传输压力,使用Gzip格式对网页资源进行压缩。在资源包较大的情况下,可以减小网络传输资源的容量。但是会使得客户端需要额外解码,增加cpu负载。当启用gzip功能后,系统检索目录下是否有压缩好的文件,如果有就直接返回压缩内容,否则先进行压缩,再进行发送。
gzip on; gzip_proxied any; # Nginx作为反向代理的时候启用,根据某些请求和应答来决定是否在对代理请求的应答启用gzip压缩,是否压缩取决于请求头中的“Via”字段,指令中可以同时指定多个不同的参数,意义如下: #expired - 启用压缩,如果header头中包含 "Expires" 头信息 #no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息 #no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息 #private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息 #no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息 #no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息 #auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息 #any - 无条件启用压缩 gzip_http_version 1.0; # http版本,建议设置为1.0,如果网络请求有代理的话,会改变版本导致压缩失败 gzip_min_length 1k; # 最小压缩阈值,小于1k,可能会越压越大 gzip_buffers 4 16k; # 申请内存大小 gzip_comp_level 4; # 压缩等级 1-9,级别越高,压缩越好,时间越长。 gzip_types text/plain application/javascript text/css text/javascript text/xml application/xml application/xhtml+xml application/xml+rss application/json; # 针对以下type值进行压缩 gzip_disable "MSIE [1-6]\."; # 处理老版本浏览器,不支持gzip gzip_vary on; #比如客户端(浏览器)请求的信息里带上了Accept-Encoding:gzip 则返回压缩副本。如果没有带这个头信息,默认返回非压缩副本。 为代理服务器设置。 gzip_static on; # 启用静态文件压缩形式
注意配置位置,其中gzip可以在location中,其他配置必须在server或是http中。这样我们这能使用一种配置设置gzip。可以通过控制gzip来选择为哪些应用开启gzip压缩。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。