server {
listen 80;
server_name IP test.xhqb.com IP1; #可以配置多个域名,和IP
server_name_in_redirect off;
root /data/web/xhqb/htdocs;
if ($http_user_agent ~* "android|iphone|ipod|windows\sphone") {
rewrite ^/$ http://$host/m/ redirect; #如果来源的是 "android|iphone|ipod|windows\sphone") 是跳转域名下面的m站(忽略大小写),$http_user_agent #记录客户端浏览器的相关信息(相关配置)
}
不兼容如下浏览器,如果出现则503错误。可以使用ietest测试
if ($http_user_agent ~ "Mozilla/4.0\ \(compatible;\ MSIE\ 9.0;\ Windows\ NT\ 6.1\)") { return 503; }
只要出现错误则跳转对应的错误页面/data/web/xhqb/htdocs/m 下面的文件
error_page 400 = /m/400.html;
error_page 404 = /m/404.html;
error_page 500 = /m/500.html;
error_page 502 = /m/502.html;
默认返回页面
index index.html;
error_log /data/log/web/xhqb/error.log;
access_log /data/log/web/xhqb/access.log main;
默认访问域名返回的主目录
location / {
root /data/web/xhqb/htdocs;
index index.html;
}
如果访问 域名下面/fp 则进行负载均衡调度 ~*忽略大小写 fingerprint 这是一个负载均衡的名字
location ~* ^\/fp {
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://fingerprint;
}
location ~* ^\/mallweb-app {
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://mallweb;
}
location ~* ^\/crawler {
#请求限速,如果请求数超过1,则后续全拒绝,则会出现412状态,412状态被error_page 接收/data/web/xhqb/htdocs/m/newerrorcode.json
limit_req zone=crawips burst=1 nodelay;
limit_req_status 412;
error_page 412 /m/newerrorcode.json;
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://crawler;
}
location ~* ^\/imageapi {
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://imageapi;
}
location ~* ^\/weixinh5 {
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://weixinh5;
}
location ~* ^\/callback\/ {
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://callback;
}
location ~* ^\/mallmgr\/ {
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://mallmgr;
}
location ~* ^\/sp/(.*) {
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://health/$1;
}
location ~* ^\/call {
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://mall;
}
location ~* ^\/weixin {
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://weixin;
}
location ~* ^\/h5 {
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://h5;
}
location ~* ^\/frontendcenterin {
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://frontendcenterin;
}
location ~* ^\/auth\/ {
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://auth;
}
location ~* ^\/appsvr\/ {
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://appsvr;
}
location ~* ^\/appmgr\/ {
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://appmgr;
}
location ~* ^\/CreditAssist-test {
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://creditassist;
}
/api/app/v.*
location ~* ^\/api\/app\/v.* {
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://jweAppServer;
}
访问/api/app/getAdvert 则返回一个jose,return返回200状态,返回的内容如下(一堆乱码)
location ~* ^\/api\/app\/getAdvert {
default_type application/jose;
return 200 'eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2Iiwia2lkIjoicnNhMiJ9.LE4SYeDfvJk0vWx14A6KZAWt6SWlpr4nyslj6opAwU8AGNrwCMVg0soh1bZ_QAKXjt3Z1d61lgvwVP0r9cFgSiu2N2K5Fbb2JKvG5o_tmC4aX0G3i3yWpxeZnoAlzgOMNgF5H5mdhJAW65HZQ7X_esXldw8PngldNHB8ERUh4rKRfZwQ5VP6emLj_9uJFc5HgVe5V0rPEoSS6aBha7SeKwc7CW081qbyRYy2jLBWcCgV1fTWIrEJJFYwNfxjtiy-jIWJZ66P9ajxBuvmfwYr9E8_KbM6GA11S3egvHLW-Qc3s63o2_ZWXcSw9wJcCLBMbLU4RNqsFkfXw7AEbN0YCg.KHcb3gqdHXqvW0Siw6AZrw.ThCL5VFQoyzJK89uqCr9rvZNwHSsJpo4P_GYYRU2YgTnnTbPZoPZNB-HZRolUMWyEBgWj5Q_aJUBNcGihYizVj2StByyf_EIn36Fkp1PvUDxorgXp6qeVbW8CSYriGCru5D3JiUG273TFlWeahEPmT1fgIjVLOtvChcUUV1mAsSCOug8jBWUVtv_UbJhAamv8DqMtH-2ZNmdpIajkRQ7pTBkSJXVTvEC2ECNt6R0-ff9gkAxbahJxZ8kJpiBTRM0UsFKvayXgfwbsdpG6lHTlgfneoCLnpFPIJyudXxKqzeX50oc632EmwtmM7q5-c396TWVARI31ZVkDmEajX--nDWaS1COHd02ABKL7MORq71UHq5M9C0k4KxZPiSELYpfnzipjbeAGZ6Fv3F3NGH5T2rHWcwZmiJOtxJcqgCywzbdMQ4hDOKnAWOeKKjEXu-eycXiXJ-7j1dYlj90bxLVzm8v0X00vXML2LDtcQ74v6vAOx605PNhzYtWXmExCfUZlA_FKqFPwhkcNUnJomQ-xbDf6HE36MZJbYgFZg2KJ8h47ud2B35N0IFoU4jXIcj-Gbr9sMdkPohhsOHYtgLcitCwtUlOT7zUuV9V1TCaxVCj_C4xrpkz3hFi-o9CvnTotQknIkDAlb3wiHdYPHF13mo_M6YgYC53uNr949Wi9eUjoU-H0k_3l4dNcuMHXQVxBbkmkmFN-xapEgW0NLDXwNpi6UjluUIhkCXSYGOMssmIvsnCOj-ZzBEOTKp0GNe8-UCv_MQP6i8lAAnXANhoBTN1IhIcEmJp7x7RlE5BhSnBHMIYrSSWhihbxTNEtMKX6OlDTx3Y889KTZoQbKoF7tyhDaEtmeanx7GHjM5uQHaltV5Bra3mu6hWBc-Owqt_Sh6eH7tNy-TZpn90cZuoNPUJ7g78JFM6KKTiUS3D2FKfyWyp5ZDNuX_L_QJsDlS8vCqZjoCKQiGIcn_P1TiA4O5l7QUtc3nmeWZq_PmyeDEqY6VOwRtLH1ETKq4qLTlk9UjDPhaxM72tvgJugi3lF7lFqLZzlVfnqQfVh4R68jmDSG3X-KR1NfjuAM2JPJ3-0oJ-HL9XiI-kRpNkpSVbxwFOMh_Pm35t3WfMfYv3-W75orVFurhXzqhxtaGg2j71fawtjsLtDZTJSuOXYQlX6q8qyn5ykvZwAoSanUQO3wCg7HBFtbKC8j8IPuRKDAXI6KbJhgWqQ_NhUSd0e2hIufT19_XZp-dS_tuXwmgyhs9wKU6SxeWGYDvunQmh_k7VJ0gUS_zPQmfZC0sOYBnsQX5b2za2aIsb47Q9XGWrc1hE_qubx9RYLxWG4LhACWUZVWoNrPrQaQOzv-AAgiIOVmQENgQbFssb-IGUkSJRWQyfY7Kf-GLlVxSdXL-27xGx6atUv197txJsT0DjDXE4ldPXI-mbOU_exHYS9VT13EgA1lNkIsERnxOx8zNfXuXW.H2jZ9ubuIjvg4C4iYuoMBg';
}
location ~* ^\/api\/app {
default_type application/jose;
return 200 'eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBMV81In0.MVdye2n9hk9x9_gZjfRIpSFMXgDoAyFXdL5VBcrOKzRq8bpjKO_UBhwdu5-d__sn5Z3Dob2kqACXmibG89uy7AosPAdiIaO65aIHirBnR1uC3ibNX4CUCSI4VYV7OB-iORUv1hl5KhtwzOX9QcK8iOFiP7-RaLgR926c39MbqjwyxG_YgtkY4uChhCAVHsm3LxXTEZrCzTN6rTrmlNeUKYoAx6CyUgsBYO_6Dv6VvV-0BoU3aoj30ExOblE3C68_Wh6uSxRKSWEI7FoXxuND8Da_svL6iyBKknCij3ASPpZOT8gsEnVSi0i44p7mOmMWLhS-es-bNWDCzjUP941KLw.HNF8cle7Pr7Z-I7zDEYf2w.oR6a0jUR94bJM8WjLMvhzr0G8mHwSnnEf-ujgmhiAQAVMqZWgtIaJMUxWdmvlMzrJMsJ-7uccrO4ewNNna3A8IcuPPA7IMot8-CxBvqpHc52WNrrTqqc5OadFsoYKs5arRnEStx_7Q2efuTNtQ6vf4MkYfyD6aU_QQVY7cwP4TDKILEXviEP9qQxrrw0fZ2NIFoFQXg-aZ-NE9xKWt8kW6B0ljxjijo0CHQ_foY1_7w.lyK3aXfgm8Z0ZVQ5JqIFkg';
}
location ~ /get_json {
default_type application/json;
return 200 '{eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBMV81In0.rg0bARf9trCQ3jXNSnXhUISJo3INSlep6tE38RRXQSJPKkaIFHjzCW9uLStdKyAVDolS-_pvUohSQNQ1YM1UTqcLqVJ9vkYffxYDe6lghEPF-kXSKmjoGq4Ho0u9FfN2xNu7uHl8HDGPWIhAGSArMDJ8uz6dhiD_qG1O5leQ7t7L6575jp5et85r5SAqy5OCIjNjjzRO-gJ-V8tsWSz6e0O8sazOjeFuuVHC7VgTH7COA_jYQ5IZ3ooU0kqNHo4Q86JNariomPw-HtTUlze0TXzObw_oOhkQqegF-0hNbfIDe6GyQriZNVPo5akZx_mgqp8F1EYS6pUk46sHvQLg-Q.sIyAuILZxp6DitWPdB_U6g.4We_zGm8cM9PGXyx5d1ESo9QBURQqxLTJ4VVcwnFFjl5TNGNzv-hZJnRTilaydpZKhDpyIaWoxofZ8mXSHYarMUXaI5oA1BAqKx78I-5KcBhA9zlXw3qvzSGYjKot9-MJOcjuTvkC1Ebd4pJvEUhiNeHz8aXBw6m1xKidph_VaE.xC5ZvA0A4wElqeQVG7zJ3Q}';
}
如果访问(api|h5image|h5|frontendcenterin-biz-service-impl) 则通过负载下发给appsvr
location ~* ^\/(api|h5image|h5|frontendcenterin-biz-service-impl)\/ {
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://appsvr;
}
location ~* ^\/staff\/api {
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://staff_api;
}
访问/prod-mall-item/(.*),则先找本地是否存在该url,如果找不到则找@s3,@s3在location中定义
location ~* ^/prod-mall-item/(.*) {
try_files $uri @s3;
}
@s3 亚马逊的存储。如下set都是自定义头部信息,proxy_set_header 发送给服务的头信息,中携带了存储的访问域名
location @s3 {
set $s3_bucket 'prod-mall-item.s3.cn-north-1.amazonaws.com.cn';
set $url_full '$1';
proxy_http_version 1.1;
proxy_set_header Host $s3_bucket;
proxy_set_header Authorization '';
proxy_hide_header x-amz-id-2;
proxy_hide_header x-amz-request-id;
proxy_hide_header Set-Cookie;
proxy_ignore_headers 'Set-Cookie';
proxy_buffering off;
proxy_intercept_errors on;
resolver 8.8.8.8 114.114.114.114 valid=300s;
resolver_timeout 10s;
代理至后端 prod-mall-item.s3.cn-north-1.amazonaws.com.cn/ (test.jpg代表$url_full $url_full =$1)
proxy_pass http://$s3_bucket/$url_full;
}
location ~* ^\/gondarfront-in {
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://gondarfront-in;
}
#匹配大小写 .*\.(svn|git|cvs) 统统拒绝 比如 tt.svn .git .cvs
location ~ .*\.(svn|git|cvs) {
deny all;
}
# 忽略大小写匹配 .*\.htm|html|xml|shtml ->缓存 expires
location ~* \.(htm|html|xml|shtml)$ {
expires 600; 秒
}
location ~* \.(js|css)$ {
expires 30d; 天
}
location ~* \.(mp3|htc|gif|ico|png|swf|jpg|jpeg|bmp)$ {
etag off; 关闭校验
}
}
server {
listen 0.0.0.0:443;
server_name IP test.xhqb.com IP1;
server_name_in_redirect off;
root /data/web/xhqb/htdocs;
if ($http_user_agent ~* "android|iphone|ipod|windows\sphone") {
rewrite ^/$ http://$host/m/ redirect;
}
error_page 400 = /m/400.html;
error_page 404 = /m/404.html;
error_page 500 = /m/500.html;
error_page 502 = /m/502.html;
index index.html;
error_log /data/log/web/xhqb/error.log;
access_log /data/log/web/xhqb/access.log main;
ssl on;
ssl_certificate /usr/local/nginx/conf/key/new/server.pem;
ssl_certificate_key /usr/local/nginx/conf/key/new/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
ssl_prefer_server_ciphers on;
ssl_session_timeout 5m;
ssl_session_cache builtin:1000 shared:SSL:10m;
location / {
index index.html;
}
location ~* ^\/callback\/ {
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://callback;
}
location ~* ^\/mallmgr\/ {
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://mallmgr;
}
location ~* ^\/(m|mallh5)\/.*\.(eot|svg|ttf|woff|gif|png|bmp|jpg|jpeg|css|js|mp3|htc|ico|mov|mp4)$ {
add_header Last-Modified "";
etag off;
}
location ~* ^\/auth\/ {
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://auth;
}
location ~* ^\/appsvr\/ {
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://appsvr;
}
location ~* ^\/appmgr\/ {
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://appmgr;
}
location ~* ^\/hydra-web\/ {
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://hydra-web;
}
location ~* ^\/(api|h5)\/ {
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://appsvr;
}
location ~ .*\.(svn|git|cvs) {
deny all;
}
location ~* \.(htm|html|xml|shtml)$ {
expires 600;
}
location ~* \.(js|css)$ {
expires 30d;
}
location ~* \.(mp3|htc|gif|ico|png|swf|jpg|jpeg|bmp)$ {
expires 365d;
}
}