{"id":1662,"date":"2021-03-02T23:59:31","date_gmt":"2021-03-02T15:59:31","guid":{"rendered":"https:\/\/199604.com\/?p=1662"},"modified":"2021-03-02T23:59:31","modified_gmt":"2021-03-02T15:59:31","slug":"nginx%e7%ac%94%e8%ae%b0","status":"publish","type":"post","link":"https:\/\/199604.com\/1662","title":{"rendered":"Nginx\u7b14\u8bb0"},"content":{"rendered":"<h4>\u4e00\u3001Nginx \u7b80\u4ecb<\/h4>\n<h5>1.<strong>\u4ec0\u4e48\u662f Nginx?<\/strong><\/h5>\n<p>Nginx\uff08engine x\uff09\u662f\u4e00\u6b3e\u8f7b\u91cf\u7ea7\u7684 Web \u670d\u52a1\u5668 \u3001\u53cd\u5411\u4ee3\u7406\u670d\u52a1\u5668\u53ca\u7535\u5b50\u90ae\u4ef6\uff08IMAP\/POP3\uff09\u4ee3\u7406\u670d\u52a1\u5668\u3002<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/qn.199604.com\/typoraImg\/687474703a2f2f64756e77752e746573742e757063646e2e6e65742f63732f7765622f6e67696e782f6e67696e782e6a7067217a70.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"http:\/\/qn.199604.com\/typoraImg\/687474703a2f2f64756e77752e746573742e757063646e2e6e65742f63732f7765622f6e67696e782f6e67696e782e6a7067217a70.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"img\" \/><\/div><\/p>\n<h5>2.<strong>\u4ec0\u4e48\u662f\u53cd\u5411\u4ee3\u7406\uff1f<\/strong><\/h5>\n<p>\u53cd\u5411\u4ee3\u7406\uff08Reverse Proxy\uff09\u65b9\u5f0f\u662f\u6307\u4ee5\u4ee3\u7406\u670d\u52a1\u5668\u6765\u63a5\u53d7 internet \u4e0a\u7684\u8fde\u63a5\u8bf7\u6c42\uff0c\u7136\u540e\u5c06\u8bf7\u6c42\u8f6c\u53d1\u7ed9\u5185\u90e8\u7f51\u7edc\u4e0a\u7684\u670d\u52a1\u5668\uff0c\u5e76\u5c06\u4ece\u670d\u52a1\u5668\u4e0a\u5f97\u5230\u7684\u7ed3\u679c\u8fd4\u56de\u7ed9 internet \u4e0a\u8bf7\u6c42\u8fde\u63a5\u7684\u5ba2\u6237\u7aef\u3002<\/p>\n<p>\u6b64\u65f6\u4ee3\u7406\u670d\u52a1\u5668\u5bf9\u5916\u5c31\u8868\u73b0\u4e3a\u4e00\u4e2a\u53cd\u5411\u4ee3\u7406\u670d\u52a1\u5668\uff0c\u5982\u4e0b\u56fe\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/qn.199604.com\/typoraImg\/640.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"http:\/\/qn.199604.com\/typoraImg\/640.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\u56fe\u7247\" \/><\/div><\/p>\n<h4>\u4e8c\u3001Nginx \u5165\u95e8<\/h4>\n<blockquote><p>\u8be6\u7ec6\u5b89\u88c5\u65b9\u6cd5\u8bf7\u53c2\u8003\uff1a<a href=\"https:\/\/github.com\/dunwu\/nginx-tutorial\/blob\/master\/docs\/nginx-ops.md\">Nginx \u8fd0\u7ef4<\/a><\/p><\/blockquote>\n<p>nginx \u7684\u4f7f\u7528\u6bd4\u8f83\u7b80\u5355\uff0c\u5c31\u662f\u51e0\u6761\u547d\u4ee4\u3002<\/p>\n<p>\u5e38\u7528\u5230\u7684\u547d\u4ee4\u5982\u4e0b\uff1a<\/p>\n<pre><code>nginx -s stop       \u5feb\u901f\u5173\u95edNginx\uff0c\u53ef\u80fd\u4e0d\u4fdd\u5b58\u76f8\u5173\u4fe1\u606f\uff0c\u5e76\u8fc5\u901f\u7ec8\u6b62web\u670d\u52a1\u3002\r\nnginx -s quit       \u5e73\u7a33\u5173\u95edNginx\uff0c\u4fdd\u5b58\u76f8\u5173\u4fe1\u606f\uff0c\u6709\u5b89\u6392\u7684\u7ed3\u675fweb\u670d\u52a1\u3002\r\nnginx -s reload     \u56e0\u6539\u53d8\u4e86Nginx\u76f8\u5173\u914d\u7f6e\uff0c\u9700\u8981\u91cd\u65b0\u52a0\u8f7d\u914d\u7f6e\u800c\u91cd\u8f7d\u3002\r\nnginx -s reopen     \u91cd\u65b0\u6253\u5f00\u65e5\u5fd7\u6587\u4ef6\u3002\r\nnginx -c filename   \u4e3a Nginx \u6307\u5b9a\u4e00\u4e2a\u914d\u7f6e\u6587\u4ef6\uff0c\u6765\u4ee3\u66ff\u7f3a\u7701\u7684\u3002\r\nnginx -t            \u4e0d\u8fd0\u884c\uff0c\u4ec5\u4ec5\u6d4b\u8bd5\u914d\u7f6e\u6587\u4ef6\u3002nginx \u5c06\u68c0\u67e5\u914d\u7f6e\u6587\u4ef6\u7684\u8bed\u6cd5\u7684\u6b63\u786e\u6027\uff0c\u5e76\u5c1d\u8bd5\u6253\u5f00\u914d\u7f6e\u6587\u4ef6\u4e2d\u6240\u5f15\u7528\u5230\u7684\u6587\u4ef6\u3002\r\nnginx -v            \u663e\u793a nginx \u7684\u7248\u672c\u3002\r\nnginx -V            \u663e\u793a nginx \u7684\u7248\u672c\uff0c\u7f16\u8bd1\u5668\u7248\u672c\u548c\u914d\u7f6e\u53c2\u6570\u3002\r\n<\/code><\/pre>\n<h4>\u4e09\u3001Nginx \u5b9e\u6218<\/h4>\n<p>\u6211\u59cb\u7ec8\u8ba4\u4e3a\uff0c\u5404\u79cd\u5f00\u53d1\u5de5\u5177\u7684\u914d\u7f6e\u8fd8\u662f\u7ed3\u5408\u5b9e\u6218\u6765\u8bb2\u8ff0\uff0c\u4f1a\u8ba9\u4eba\u66f4\u6613\u7406\u89e3\u3002<\/p>\n<h5>Http\u53cd\u5411\u4ee3\u7406<\/h5>\n<p>\u6211\u4eec\u5148\u5b9e\u73b0\u4e00\u4e2a\u5c0f\u76ee\u6807\uff1a\u4e0d\u8003\u8651\u590d\u6742\u7684\u914d\u7f6e\uff0c\u4ec5\u4ec5\u662f\u5b8c\u6210\u4e00\u4e2a http \u53cd\u5411\u4ee3\u7406\u3002<\/p>\n<p><code>nginx.conf<\/code> \u914d\u7f6e\u6587\u4ef6\u5982\u4e0b\uff1a<\/p>\n<blockquote><p>\u6ce8\uff1a<code>conf\/nginx.conf<\/code> \u662f nginx \u7684\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6\u3002\u4f60\u4e5f\u53ef\u4ee5\u4f7f\u7528 nginx -c \u6307\u5b9a\u4f60\u7684\u914d\u7f6e\u6587\u4ef6<\/p><\/blockquote>\n<pre><code>#\u8fd0\u884c\u7528\u6237\r\n#user  nginx;\r\n\r\n#\u542f\u52a8\u8fdb\u7a0b,\u901a\u5e38\u8bbe\u7f6e\u6210\u548ccpu\u7684\u6570\u91cf\u76f8\u7b49\r\nworker_processes  1;\r\n\r\n#\u5168\u5c40\u9519\u8bef\u65e5\u5fd7\r\nerror_log  \/var\/log\/nginx\/error.log;\r\nerror_log  \/var\/log\/nginx\/warn.log warn;\r\nerror_log  \/var\/log\/nginx\/notice.log  notice;\r\nerror_log  \/var\/log\/nginx\/info.log  info;\r\n\r\n#PID\u6587\u4ef6\uff0c\u8bb0\u5f55\u5f53\u524d\u542f\u52a8\u7684nginx\u7684\u8fdb\u7a0bID\r\npid        \/var\/run\/nginx.pid;\r\n\r\n#\u5de5\u4f5c\u6a21\u5f0f\u53ca\u8fde\u63a5\u6570\u4e0a\u9650\r\nevents {\r\n\t#\u5355\u4e2a\u540e\u53f0worker process\u8fdb\u7a0b\u7684\u6700\u5927\u5e76\u53d1\u94fe\u63a5\u6570\r\n    worker_connections  1024;\r\n}\r\n\r\n#\u8bbe\u5b9ahttp\u670d\u52a1\u5668\uff0c\u5229\u7528\u5b83\u7684\u53cd\u5411\u4ee3\u7406\u529f\u80fd\u63d0\u4f9b\u8d1f\u8f7d\u5747\u8861\u652f\u6301\r\nhttp {\r\n    #\u8bbe\u5b9amime\u7c7b\u578b(\u90ae\u4ef6\u652f\u6301\u7c7b\u578b),\u7c7b\u578b\u7531mime.types\u6587\u4ef6\u5b9a\u4e49\r\n    include       \/etc\/nginx\/mime.types;\r\n    default_type  application\/octet-stream;\r\n\t\r\n\t#\u8bbe\u5b9a\u65e5\u5fd7\r\n    log_format  main  '$remote_addr - $remote_user [$time_local] \"$request\" '\r\n                      '$status $body_bytes_sent \"$http_referer\" '\r\n                      '\"$http_user_agent\" \"$http_x_forwarded_for\"';\r\n\r\n    access_log  \/var\/log\/nginx\/access.log  main;\r\n\r\n\t#sendfile \u6307\u4ee4\u6307\u5b9a nginx \u662f\u5426\u8c03\u7528 sendfile \u51fd\u6570\uff08zero copy \u65b9\u5f0f\uff09\u6765\u8f93\u51fa\u6587\u4ef6\uff0c\u5bf9\u4e8e\u666e\u901a\u5e94\u7528\uff0c\r\n    sendfile        on;\r\n    #tcp_nopush     on;\r\n\r\n\t#\u8fde\u63a5\u8d85\u65f6\u65f6\u95f4\r\n    keepalive_timeout  65;\r\n\r\n\t#gzip\u538b\u7f29\u5f00\u5173\r\n    gzip  on;\r\n    \r\n    #\u5141\u8bb8\u5ba2\u6237\u7aef\u8bf7\u6c42\u7684\u6700\u5927\u5355\u6587\u4ef6\u5b57\u8282\u6570\r\n    client_max_body_size 50m; \r\n    \r\n    #\u8bbe\u5b9a\u5b9e\u9645\u7684\u670d\u52a1\u5668\u5217\u8868\r\n    upstream demo_server1{\r\n        server 127.0.0.1:8085;\r\n    }\r\n    \r\n    #\u5f15\u7528\/etc\/nginx\/conf.d\/\u4e0b\u7684*.conf\u6587\u4ef6\r\n    include \/etc\/nginx\/conf.d\/*.conf;\r\n}\r\n<\/code><\/pre>\n<p>\/etc\/nginx\/conf.d\/\u4e0b\u7684*.conf\u6587\u4ef6\uff1a<\/p>\n<pre><code>#HTTP\u670d\u52a1\u5668\r\nserver {\r\n\t\t#\u76d1\u542c8088\u7aef\u53e3\uff0c80\u7aef\u53e3\u662f\u77e5\u540d\u7aef\u53e3\u53f7\uff0c\u7528\u4e8eHTTP\u534f\u8bae\r\n        listen       8088;\r\n        \r\n        #\u5b9a\u4e49\u4f7f\u7528www.xx.com\u8bbf\u95ee\r\n        server_name  localhost;\r\n\t\t\r\n\t\t#\u7f16\u7801\u683c\u5f0f\r\n        charset utf-8;\r\n        #charset koi8-r;\r\n        \r\n        #\u4ee3\u7406\u914d\u7f6e\u53c2\u6570\r\n        proxy_connect_timeout 180;\r\n        proxy_send_timeout 180;\r\n        proxy_read_timeout 180;\r\n        proxy_set_header Host $host;\r\n        proxy_set_header X-Forwarder-For $remote_addr;\r\n\t\t\r\n\t\t#\u8bbe\u5b9a\u65e5\u5fd7\u683c\u5f0f\r\n\t\taccess_log    \/var\/log\/nginx\/access.log;\r\n        #access_log  logs\/host.access.log  main;\r\n\r\n\t\t#\u53cd\u5411\u4ee3\u7406\u7684\u8def\u5f84\uff08\u548cupstream\u7ed1\u5b9a\uff09\uff0clocation \u540e\u9762\u8bbe\u7f6e\u6620\u5c04\u7684\u8def\u5f84\r\n        location \/ {\r\n        \t#\u6307\u5411webapp\u7684\u76ee\u5f55\r\n            root   \/usr\/share\/nginx\/html;\r\n            #\u9996\u9875\r\n            index  index.html index.htm;\r\n            \r\n            #proxy_pass http:\/\/zp_server1;\r\n        }\r\n\t\t\r\n\t\t#\u8bbe\u5b9a\u67e5\u770bapi\u7684\u5730\u5740\r\n\t\tlocation \/api\/ {\r\n\t\t\tproxy_pass http:\/\/127.0.0.1:8085\/api\/;\r\n\t\t}\r\n\t\t\r\n\t\t#\u9759\u6001\u6587\u4ef6\uff0cnginx\u81ea\u5df1\u5904\u7406\r\n        location ~ ^\/(images|javascript|js|css|flash|media|static)\/ {\r\n        \troot   \/usr\/share\/nginx\/html;\r\n            #root D:\\01_Workspace\\Project\\github\\zp\\SpringNotes\\spring-security\\spring-shiro\\src\\main\\webapp\\views;\r\n            #\u8fc7\u671f30\u5929\uff0c\u9759\u6001\u6587\u4ef6\u4e0d\u600e\u4e48\u66f4\u65b0\uff0c\u8fc7\u671f\u53ef\u4ee5\u8bbe\u5927\u4e00\u70b9\uff0c\u5982\u679c\u9891\u7e41\u66f4\u65b0\uff0c\u5219\u53ef\u4ee5\u8bbe\u7f6e\u5f97\u5c0f\u4e00\u70b9\u3002\r\n            expires 30d;\r\n        }\r\n        \r\n        #\u7981\u6b62\u8bbf\u95ee .htxxx \u6587\u4ef6\r\n        location ~ \/\\.ht {\r\n            deny all;\r\n        }\r\n\t\t\r\n        #error_page  404              \/404.html;\r\n\r\n        # redirect server error pages to the static page \/50x.html\r\n        #\r\n        error_page   500 502 503 504  \/50x.html;\r\n        location = \/50x.html {\r\n            root   html;\r\n        }\r\n\r\n        # proxy the PHP scripts to Apache listening on 127.0.0.1:80\r\n        #\r\n        #location ~ \\.php$ {\r\n        #    proxy_pass   http:\/\/127.0.0.1;\r\n        #}\r\n\r\n        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000\r\n        #\r\n        #location ~ \\.php$ {\r\n        #    root           html;\r\n        #    fastcgi_pass   127.0.0.1:9000;\r\n        #    fastcgi_index  index.php;\r\n        #    fastcgi_param  SCRIPT_FILENAME  \/scripts$fastcgi_script_name;\r\n        #    include        fastcgi_params;\r\n        #}\r\n\r\n        # deny access to .htaccess files, if Apache's document root\r\n        # concurs with nginx's one\r\n        #\r\n        #location ~ \/\\.ht {\r\n        #    deny  all;\r\n        #}\r\n    }\r\n<\/code><\/pre>\n<h5>Https\u53cd\u5411\u4ee3\u7406<\/h5>\n<p>\u4e00\u4e9b\u5bf9\u5b89\u5168\u6027\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u7ad9\u70b9\uff0c\u53ef\u80fd\u4f1a\u4f7f\u7528 HTTPS\uff08\u4e00\u79cd\u4f7f\u7528 ssl \u901a\u4fe1\u6807\u51c6\u7684\u5b89\u5168 HTTP \u534f\u8bae\uff09\u3002<\/p>\n<p>\u8fd9\u91cc\u4e0d\u79d1\u666e HTTP \u534f\u8bae\u548c SSL \u6807\u51c6\u3002\u4f46\u662f\uff0c\u4f7f\u7528 nginx \u914d\u7f6e https \u9700\u8981\u77e5\u9053\u51e0\u70b9\uff1a<\/p>\n<ul>\n<li>HTTPS \u7684\u56fa\u5b9a\u7aef\u53e3\u53f7\u662f 443\uff0c\u4e0d\u540c\u4e8e HTTP \u7684 80 \u7aef\u53e3<\/li>\n<li>SSL \u6807\u51c6\u9700\u8981\u5f15\u5165\u5b89\u5168\u8bc1\u4e66\uff0c\u6240\u4ee5\u5728 nginx.conf \u4e2d\u4f60\u9700\u8981\u6307\u5b9a\u8bc1\u4e66\u548c\u5b83\u5bf9\u5e94\u7684 key<\/li>\n<\/ul>\n<p>\u5176\u4ed6\u548c http \u53cd\u5411\u4ee3\u7406\u57fa\u672c\u4e00\u6837\uff0c\u53ea\u662f\u5728 <code>Server<\/code> \u90e8\u5206\u914d\u7f6e\u6709\u4e9b\u4e0d\u540c\u3002<\/p>\n<pre><code>#HTTP\u670d\u52a1\u5668\r\n  server {\r\n      #\u76d1\u542c443\u7aef\u53e3\u3002443\u4e3a\u77e5\u540d\u7aef\u53e3\u53f7\uff0c\u4e3b\u8981\u7528\u4e8eHTTPS\u534f\u8bae\r\n      listen       443 ssl;\r\n\r\n      #\u5b9a\u4e49\u4f7f\u7528www.xx.com\u8bbf\u95ee\r\n      server_name  localhost;\r\n\r\n      #ssl\u8bc1\u4e66\u6587\u4ef6\u4f4d\u7f6e(\u5e38\u89c1\u8bc1\u4e66\u6587\u4ef6\u683c\u5f0f\u4e3a\uff1acrt\/pem)\r\n      ssl_certificate      cert.pem;\r\n      #ssl\u8bc1\u4e66key\u4f4d\u7f6e\r\n      ssl_certificate_key  cert.key;\r\n\r\n      #ssl\u914d\u7f6e\u53c2\u6570\uff08\u9009\u62e9\u6027\u914d\u7f6e\uff09\r\n      ssl_session_cache    shared:SSL:1m;\r\n      ssl_session_timeout  5m;\r\n      #\u6570\u5b57\u7b7e\u540d\uff0c\u6b64\u5904\u4f7f\u7528MD5\r\n      ssl_ciphers  HIGH:!aNULL:!MD5;\r\n      ssl_prefer_server_ciphers  on;\r\n\r\n      location \/ {\r\n          root   \/usr\/share\/nginx\/html;\r\n          index  index.html index.htm;\r\n      }\r\n  }\r\n<\/code><\/pre>\n<h5>\u8d1f\u8f7d\u5747\u8861<\/h5>\n<p>\u524d\u9762\u7684\u4f8b\u5b50\u4e2d\uff0c\u4ee3\u7406\u4ec5\u4ec5\u6307\u5411\u4e00\u4e2a\u670d\u52a1\u5668\u3002<\/p>\n<p>\u4f46\u662f\uff0c\u7f51\u7ad9\u5728\u5b9e\u9645\u8fd0\u8425\u8fc7\u7a0b\u4e2d\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4ee5\u96c6\u7fa4\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u8fd9\u65f6\u9700\u8981\u4f7f\u7528\u8d1f\u8f7d\u5747\u8861\u6765\u5206\u6d41\u3002<\/p>\n<p>nginx \u4e5f\u53ef\u4ee5\u5b9e\u73b0\u7b80\u5355\u7684\u8d1f\u8f7d\u5747\u8861\u529f\u80fd\u3002<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/qn.199604.com\/typoraImg\/\u5fae\u4fe1\u56fe\u7247_20210124225931.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"http:\/\/qn.199604.com\/typoraImg\/\u5fae\u4fe1\u56fe\u7247_20210124225931.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\u5fae\u4fe1\u56fe\u7247_20210124225931\" \/><\/div><\/p>\n<p>\u5047\u8bbe\u8fd9\u6837\u4e00\u4e2a\u5e94\u7528\u573a\u666f\uff1a\u5c06\u5e94\u7528\u90e8\u7f72\u5728 192.168.1.11:80\u3001192.168.1.12:80\u3001192.168.1.13:80 \u4e09\u53f0 Linux \u73af\u5883\u7684\u670d\u52a1\u5668\u4e0a\u3002\u7f51\u7ad9\u57df\u540d\u53eb <a class=\"url\" href=\"http:\/\/www.baidu.com\" target=\"_blank\" rel=\"noopener noreferrer\">www.baidu.com<\/a>\uff0c\u516c\u7f51 IP \u4e3a 192.168.1.11\u3002<\/p>\n<p>\u5728\u516c\u7f51 IP \u6240\u5728\u7684\u670d\u52a1\u5668\u4e0a\u90e8\u7f72 Nginx\uff0c\u5bf9\u6240\u6709\u8bf7\u6c42\u505a\u8d1f\u8f7d\u5747\u8861\u5904\u7406\uff08\u4e0b\u9762\u4f8b\u5b50\u4e2d\u4f7f\u7528\u7684\u662f\u52a0\u6743\u8f6e\u8be2\u7b56\u7565\uff09\u3002<\/p>\n<p>nginx.conf \u914d\u7f6e\u5982\u4e0b\uff1a<\/p>\n<pre><code>http {\r\n    #\u8bbe\u5b9amime\u7c7b\u578b,\u7c7b\u578b\u7531mime.type\u6587\u4ef6\u5b9a\u4e49\r\n    include       \/etc\/nginx\/mime.types;\r\n    default_type  application\/octet-stream;\r\n    #\u8bbe\u5b9a\u65e5\u5fd7\u683c\u5f0f\r\n    access_log    \/var\/log\/nginx\/access.log;\r\n\r\n    #\u8bbe\u5b9a\u8d1f\u8f7d\u5747\u8861\u7684\u670d\u52a1\u5668\u5217\u8868\r\n    upstream load_balance_server {\r\n        #weigth\u53c2\u6570\u8868\u793a\u6743\u503c\uff0c\u6743\u503c\u8d8a\u9ad8\u88ab\u5206\u914d\u5230\u7684\u51e0\u7387\u8d8a\u5927\r\n        server 192.168.1.11:80   weight=5;\r\n        server 192.168.1.12:80   weight=1;\r\n        server 192.168.1.13:80   weight=6;\r\n    }\r\n\r\n   #HTTP\u670d\u52a1\u5668\r\n   server {\r\n        #\u4fa6\u542c80\u7aef\u53e3\r\n        listen       80;\r\n\r\n        #\u5b9a\u4e49\u4f7f\u7528www.xx.com\u8bbf\u95ee\r\n        server_name  www.baidu.com;\r\n\r\n        #\u5bf9\u6240\u6709\u8bf7\u6c42\u8fdb\u884c\u8d1f\u8f7d\u5747\u8861\u8bf7\u6c42\r\n        location \/ {\r\n            root        \/usr\/share\/nginx\/html;                 #\u5b9a\u4e49\u670d\u52a1\u5668\u7684\u9ed8\u8ba4\u7f51\u7ad9\u6839\u76ee\u5f55\u4f4d\u7f6e\r\n            index       index.html index.htm;  #\u5b9a\u4e49\u9996\u9875\u7d22\u5f15\u6587\u4ef6\u7684\u540d\u79f0\r\n            proxy_pass  http:\/\/load_balance_server ;#\u8bf7\u6c42\u8f6c\u5411load_balance_server \u5b9a\u4e49\u7684\u670d\u52a1\u5668\u5217\u8868\r\n\r\n            #\u4ee5\u4e0b\u662f\u4e00\u4e9b\u53cd\u5411\u4ee3\u7406\u7684\u914d\u7f6e(\u53ef\u9009\u62e9\u6027\u914d\u7f6e)\r\n            #proxy_redirect off;\r\n            proxy_set_header Host $host;\r\n            proxy_set_header X-Real-IP $remote_addr;\r\n            #\u540e\u7aef\u7684Web\u670d\u52a1\u5668\u53ef\u4ee5\u901a\u8fc7X-Forwarded-For\u83b7\u53d6\u7528\u6237\u771f\u5b9eIP\r\n            proxy_set_header X-Forwarded-For $remote_addr;\r\n            proxy_connect_timeout 90;          #nginx\u8ddf\u540e\u7aef\u670d\u52a1\u5668\u8fde\u63a5\u8d85\u65f6\u65f6\u95f4(\u4ee3\u7406\u8fde\u63a5\u8d85\u65f6)\r\n            proxy_send_timeout 90;             #\u540e\u7aef\u670d\u52a1\u5668\u6570\u636e\u56de\u4f20\u65f6\u95f4(\u4ee3\u7406\u53d1\u9001\u8d85\u65f6)\r\n            proxy_read_timeout 90;             #\u8fde\u63a5\u6210\u529f\u540e\uff0c\u540e\u7aef\u670d\u52a1\u5668\u54cd\u5e94\u65f6\u95f4(\u4ee3\u7406\u63a5\u6536\u8d85\u65f6)\r\n            proxy_buffer_size 4k;              #\u8bbe\u7f6e\u4ee3\u7406\u670d\u52a1\u5668\uff08nginx\uff09\u4fdd\u5b58\u7528\u6237\u5934\u4fe1\u606f\u7684\u7f13\u51b2\u533a\u5927\u5c0f\r\n            proxy_buffers 4 32k;               #proxy_buffers\u7f13\u51b2\u533a\uff0c\u7f51\u9875\u5e73\u5747\u572832k\u4ee5\u4e0b\u7684\u8bdd\uff0c\u8fd9\u6837\u8bbe\u7f6e\r\n            proxy_busy_buffers_size 64k;       #\u9ad8\u8d1f\u8377\u4e0b\u7f13\u51b2\u5927\u5c0f\uff08proxy_buffers*2\uff09\r\n            proxy_temp_file_write_size 64k;    #\u8bbe\u5b9a\u7f13\u5b58\u6587\u4ef6\u5939\u5927\u5c0f\uff0c\u5927\u4e8e\u8fd9\u4e2a\u503c\uff0c\u5c06\u4eceupstream\u670d\u52a1\u5668\u4f20\r\n\r\n            client_max_body_size 10m;          #\u5141\u8bb8\u5ba2\u6237\u7aef\u8bf7\u6c42\u7684\u6700\u5927\u5355\u6587\u4ef6\u5b57\u8282\u6570\r\n            client_body_buffer_size 128k;      #\u7f13\u51b2\u533a\u4ee3\u7406\u7f13\u51b2\u7528\u6237\u7aef\u8bf7\u6c42\u7684\u6700\u5927\u5b57\u8282\u6570\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<h5>\u8d1f\u8f7d\u5747\u8861\u7b56\u7565<\/h5>\n<p>Nginx \u63d0\u4f9b\u4e86\u591a\u79cd\u8d1f\u8f7d\u5747\u8861\u7b56\u7565\uff0c\u8ba9\u6211\u4eec\u6765\u4e00\u4e00\u4e86\u89e3\u4e00\u4e0b\uff1a<\/p>\n<h6>\u8f6e\u8be2<\/h6>\n<pre><code>upstream bck_testing_01 {\r\n  # \u9ed8\u8ba4\u6240\u6709\u670d\u52a1\u5668\u6743\u91cd\u4e3a 1\r\n  server 192.168.250.220:8080;\r\n  server 192.168.250.221:8080;\r\n  server 192.168.250.222:8080;\r\n}\r\n<\/code><\/pre>\n<h6>\u52a0\u6743\u8f6e\u8be2<\/h6>\n<pre><code>upstream bck_testing_01 {\r\n  server 192.168.250.220:8080   weight=3;\r\n  server 192.168.250.221:8080     ;         # default weight=1\r\n  server 192.168.250.222:8080     ;        # default weight=1\r\n}\r\n<\/code><\/pre>\n<h6>\u6700\u5c11\u8fde\u63a5\u6570<\/h6>\n<pre><code>upstream bck_testing_01 {\r\n  least_conn;\r\n\r\n  # with default weight for all (weight=1)\r\n  server 192.168.250.220:8080;\r\n  server 192.168.250.221:8080;\r\n  server 192.168.250.222:8080;\r\n}\r\n<\/code><\/pre>\n<h6>\u52a0\u6743\u6700\u5c11\u8fde\u63a5\u6570<\/h6>\n<pre><code>upstream bck_testing_01 {\r\n  least_conn;\r\n\r\n  server 192.168.250.220:8080   weight=3;\r\n  server 192.168.250.221:8080   ;           # default weight=1\r\n  server 192.168.250.222:8080   ;           # default weight=1\r\n}\r\n<\/code><\/pre>\n<h6>Ip Hash<\/h6>\n<p>\u901a\u8fc7\u5ba2\u6237\u7aef\u8bf7\u6c42ip\u8fdb\u884chash\uff0c\u518d\u901a\u8fc7hash\u503c\u9009\u62e9\u540e\u7aefserver<\/p>\n<p>\u5f53\u4f60\u670d\u52a1\u7aef\u7684\u4e00\u4e2a\u7279\u5b9aurl\u8def\u5f84\u4f1a\u88ab\u540c\u4e00\u4e2a\u7528\u6237\u8fde\u7eed\u8bbf\u95ee\u65f6\uff0c\u5982\u679c\u8d1f\u8f7d\u5747\u8861\u7b56\u7565\u8fd8\u662f\u8f6e\u8be2\u7684\u8bdd\uff0c\u90a3\u8be5\u7528\u6237\u7684\u591a\u6b21\u8bbf\u95ee\u4f1a\u88ab\u6253\u5230\u5404\u53f0\u670d\u52a1\u5668\u4e0a\uff0c\u8fd9\u663e\u7136\u5e76\u4e0d\u9ad8\u6548\uff08\u4f1a\u5efa\u7acb\u591a\u6b21http\u94fe\u63a5\u7b49\u95ee\u9898\uff09\u3002\u751a\u81f3\u8003\u8651\u4e00\u79cd\u6781\u7aef\u60c5\u51b5\uff0c\u7528\u6237\u9700\u8981\u5206\u7247\u4e0a\u4f20\u6587\u4ef6\u5230\u670d\u52a1\u5668\u4e0b\uff0c\u7136\u540e\u518d\u7531\u670d\u52a1\u5668\u5c06\u5206\u7247\u5408\u5e76\uff0c\u8fd9\u65f6\u5982\u679c\u7528\u6237\u7684\u8bf7\u6c42\u5230\u8fbe\u4e86\u4e0d\u540c\u7684\u670d\u52a1\u5668\uff0c\u90a3\u4e48\u5206\u7247\u5c06\u5b58\u50a8\u4e8e\u4e0d\u540c\u7684\u670d\u52a1\u5668\u76ee\u5f55\u4e2d\uff0c\u5bfc\u81f4\u65e0\u6cd5\u5c06\u5206\u7247\u5408\u5e76\u3002\u6240\u4ee5\uff0c\u6b64\u7c7b\u573a\u666f\u53ef\u4ee5\u8003\u8651\u91c7\u7528nginx\u63d0\u4f9b\u7684ip_hash\u7b56\u7565\u3002\u65e2\u80fd\u6ee1\u8db3\u6bcf\u4e2a\u7528\u6237\u8bf7\u6c42\u5230\u540c\u4e00\u53f0\u670d\u52a1\u5668\uff0c\u53c8\u80fd\u6ee1\u8db3\u4e0d\u540c\u7528\u6237\u4e4b\u95f4\u8d1f\u8f7d\u5747\u8861\u3002<\/p>\n<pre><code>upstream bck_testing_01 {\r\n  ip_hash;\r\n\r\n  # with default weight for all (weight=1)\r\n  server 192.168.250.220:8080;\r\n  server 192.168.250.221:8080;\r\n  server 192.168.250.222:8080 down;#\u8868\u793a\u4e0b\u7ebf\u7684\u610f\u601d\r\n}\r\n<\/code><\/pre>\n<h6>\u666e\u901aHash\uff08Url Hash\uff09<\/h6>\n<p>\u901a\u8fc7\u8bf7\u6c42url\u8fdb\u884chash\uff0c\u518d\u901a\u8fc7hash\u503c\u9009\u62e9\u540e\u7aefserver<\/p>\n<p>\u4e00\u822c\u6765\u8bb2\uff0c\u8981\u7528\u5230urlhash\uff0c\u662f\u8981\u914d\u5408\u7f13\u5b58\u547d\u4e2d\u6765\u4f7f\u7528\u3002\u4e3e\u4e00\u4e2a\u6211\u9047\u5230\u7684\u5b9e\u4f8b\uff1a\u6709\u4e00\u4e2a\u670d\u52a1\u5668\u96c6\u7fa4A\uff0c\u9700\u8981\u5bf9\u5916\u63d0\u4f9b\u6587\u4ef6\u4e0b\u8f7d\uff0c\u7531\u4e8e\u6587\u4ef6\u4e0a\u4f20\u91cf\u5de8\u5927\uff0c\u6ca1\u6cd5\u5b58\u50a8\u5230\u670d\u52a1\u5668\u78c1\u76d8\u4e2d\uff0c\u6240\u4ee5\u7528\u5230\u4e86\u7b2c\u4e09\u65b9\u4e91\u5b58\u50a8\u6765\u505a\u6587\u4ef6\u5b58\u50a8\u3002\u670d\u52a1\u5668\u96c6\u7fa4A\u6536\u5230\u5ba2\u6237\u7aef\u8bf7\u6c42\u4e4b\u540e\uff0c\u9700\u8981\u4ece\u4e91\u5b58\u50a8\u4e2d\u4e0b\u8f7d\u6587\u4ef6\u7136\u540e\u8fd4\u56de\uff0c\u4e3a\u4e86\u7701\u53bb\u4e0d\u5fc5\u8981\u7684\u7f51\u7edc\u5e26\u5bbd\u548c\u4e0b\u8f7d\u8017\u65f6\uff0c\u5728\u670d\u52a1\u5668\u96c6\u7fa4A\u4e0a\u505a\u4e86\u4e00\u5c42\u4e34\u65f6\u7f13\u5b58\uff08\u7f13\u5b58\u4e00\u4e2a\u6708\uff09\u3002\u7531\u4e8e\u662f\u670d\u52a1\u5668\u96c6\u7fa4\uff0c\u6240\u4ee5\u540c\u4e00\u4e2a\u8d44\u6e90\u591a\u6b21\u8bf7\u6c42\uff0c\u53ef\u80fd\u4f1a\u5230\u8fbe\u4e0d\u540c\u7684\u670d\u52a1\u5668\u4e0a\uff0c\u5bfc\u81f4\u4e0d\u5fc5\u8981\u7684\u591a\u6b21\u4e0b\u8f7d\uff0c\u7f13\u5b58\u547d\u4e2d\u7387\u4e0d\u9ad8\uff0c\u4ee5\u53ca\u4e00\u4e9b\u8d44\u6e90\u65f6\u95f4\u7684\u6d6a\u8d39\u3002\u5728\u6b64\u7c7b\u573a\u666f\u4e0b\uff0c\u4e3a\u4e86\u4f7f\u5f97\u7f13\u5b58\u547d\u4e2d\u7387\u63d0\u9ad8\uff0c\u5f88\u9002\u5408\u4f7f\u7528url_hash\u7b56\u7565\uff0c\u540c\u4e00\u4e2aurl\uff08\u4e5f\u5c31\u662f\u540c\u4e00\u4e2a\u8d44\u6e90\u8bf7\u6c42\uff09\u4f1a\u5230\u8fbe\u540c\u4e00\u53f0\u673a\u5668\uff0c\u4e00\u65e6\u7f13\u5b58\u4f4f\u4e86\u8d44\u6e90\uff0c\u518d\u6b64\u6536\u5230\u8bf7\u6c42\uff0c\u5c31\u53ef\u4ee5\u4ece\u7f13\u5b58\u4e2d\u8bfb\u53d6\uff0c\u65e2\u51cf\u5c11\u4e86\u5e26\u5bbd\uff0c\u4e5f\u51cf\u5c11\u7684\u4e0b\u8f7d\u65f6\u95f4\u3002<\/p>\n<pre><code>upstream bck_testing_01 {\r\n  hash $request_uri;\r\n\r\n  # with default weight for all (weight=1)\r\n  server 192.168.250.220:8080;\r\n  server 192.168.250.221:8080;\r\n  server 192.168.250.222:8080;\r\n}\r\n<\/code><\/pre>\n<h5>\u591a\u4e2awebapp\u7684\u914d\u7f6e<\/h5>\n<p>\u5f53\u4e00\u4e2a\u7f51\u7ad9\u529f\u80fd\u8d8a\u6765\u8d8a\u4e30\u5bcc\u65f6\uff0c\u5f80\u5f80\u9700\u8981\u5c06\u4e00\u4e9b\u529f\u80fd\u76f8\u5bf9\u72ec\u7acb\u7684\u6a21\u5757\u5265\u79bb\u51fa\u6765\uff0c\u72ec\u7acb\u7ef4\u62a4\u3002\u8fd9\u6837\u7684\u8bdd\uff0c\u901a\u5e38\uff0c\u4f1a\u6709\u591a\u4e2a webapp\u3002<\/p>\n<p>\u4e3e\u4e2a\u4f8b\u5b50\uff1a\u5047\u5982 <a class=\"url\" href=\"http:\/\/www.baidu.com.com\" target=\"_blank\" rel=\"noopener noreferrer\">www.baidu.com.com<\/a> \u7ad9\u70b9\u6709\u597d\u51e0\u4e2a webapp\uff0cfinance\uff08\u91d1\u878d\uff09\u3001product\uff08\u4ea7\u54c1\uff09\u3001admin\uff08\u7528\u6237\u4e2d\u5fc3\uff09\u3002<\/p>\n<p>\u8bbf\u95ee\u8fd9\u4e9b\u5e94\u7528\u7684\u65b9\u5f0f\u901a\u8fc7\u4e0a\u4e0b\u6587(context)\u6765\u8fdb\u884c\u533a\u5206:<\/p>\n<ul>\n<li><a class=\"url\" href=\"http:\/\/www.baidu.com.com\/finance\/\" target=\"_blank\" rel=\"noopener noreferrer\">www.baidu.com.com\/finance\/<\/a><\/li>\n<li><a class=\"url\" href=\"http:\/\/www.baidu.com.com\/product\/\" target=\"_blank\" rel=\"noopener noreferrer\">www.baidu.com.com\/product\/<\/a><\/li>\n<li><a class=\"url\" href=\"http:\/\/www.baidu.com.com\/admin\/\" target=\"_blank\" rel=\"noopener noreferrer\">www.baidu.com.com\/admin\/<\/a><\/li>\n<\/ul>\n<p>\u6211\u4eec\u77e5\u9053\uff0chttp \u7684\u9ed8\u8ba4\u7aef\u53e3\u53f7\u662f 80\uff0c\u5982\u679c\u5728\u4e00\u53f0\u670d\u52a1\u5668\u4e0a\u540c\u65f6\u542f\u52a8\u8fd9 3 \u4e2a webapp \u5e94\u7528\uff0c\u90fd\u7528 80 \u7aef\u53e3\uff0c\u80af\u5b9a\u662f\u4e0d\u6210\u7684\u3002\u6240\u4ee5\uff0c\u8fd9\u4e09\u4e2a\u5e94\u7528\u9700\u8981\u5206\u522b\u7ed1\u5b9a\u4e0d\u540c\u7684\u7aef\u53e3\u53f7\u3002<\/p>\n<p>\u90a3\u4e48\uff0c\u95ee\u9898\u6765\u4e86\uff0c\u7528\u6237\u5728\u5b9e\u9645\u8bbf\u95ee <a href=\"http:\/\/www.baidu.com\/\">www.baidu.com<\/a> \u7ad9\u70b9\u65f6\uff0c\u8bbf\u95ee\u4e0d\u540c webapp\uff0c\u603b\u4e0d\u4f1a\u8fd8\u5e26\u7740\u5bf9\u5e94\u7684\u7aef\u53e3\u53f7\u53bb\u8bbf\u95ee\u5427\u3002\u6240\u4ee5\uff0c\u4f60\u518d\u6b21\u9700\u8981\u7528\u5230\u53cd\u5411\u4ee3\u7406\u6765\u505a\u5904\u7406\u3002<\/p>\n<p>\u914d\u7f6e\u4e5f\u4e0d\u96be\uff0c\u6765\u770b\u770b\u600e\u4e48\u505a\u5427\uff1a<\/p>\n<pre><code>http {\r\n    #\u6b64\u5904\u7701\u7565\u4e00\u4e9b\u57fa\u672c\u914d\u7f6e\r\n\r\n    upstream product_server{\r\n        server www.baidu.com:8081;\r\n    }\r\n\r\n    upstream admin_server{\r\n        server www.baidu.com:8082;\r\n    }\r\n\r\n    upstream finance_server{\r\n        server www.baidu.com:8083;\r\n    }\r\n\r\n    server {\r\n        #\u6b64\u5904\u7701\u7565\u4e00\u4e9b\u57fa\u672c\u914d\u7f6e\r\n        #\u9ed8\u8ba4\u6307\u5411product\u7684server\r\n        location \/ {\r\n            proxy_pass http:\/\/product_server;\r\n        }\r\n\r\n        location \/product\/{\r\n            proxy_pass http:\/\/product_server;\r\n        }\r\n\r\n        location \/admin\/ {\r\n            proxy_pass http:\/\/admin_server;\r\n        }\r\n\r\n        location \/finance\/ {\r\n            proxy_pass http:\/\/finance_server;\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<h5>\u9759\u6001\u7ad9\u70b9\u914d\u7f6e<\/h5>\n<p>\u6709\u65f6\u5019\uff0c\u6211\u4eec\u9700\u8981\u914d\u7f6e\u9759\u6001\u7ad9\u70b9(\u5373 html \u6587\u4ef6\u548c\u4e00\u5806\u9759\u6001\u8d44\u6e90)\u3002<\/p>\n<p>\u4e3e\u4f8b\u6765\u8bf4\uff1a\u5982\u679c\u6240\u6709\u7684\u9759\u6001\u8d44\u6e90\u90fd\u653e\u5728\u4e86 <code>\/usr\/share\/nginx\/html<\/code> \u76ee\u5f55\u4e0b\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728 <code>nginx.conf<\/code> \u4e2d\u6307\u5b9a\u9996\u9875\u4ee5\u53ca\u8fd9\u4e2a\u7ad9\u70b9\u7684 host \u5373\u53ef\u3002<\/p>\n<p>\u914d\u7f6e\u5982\u4e0b<\/p>\n<pre><code>worker_processes  1;\r\n\r\nevents {\r\n    worker_connections  1024;\r\n}\r\n\r\nhttp {\r\n    include       mime.types;\r\n    default_type  application\/octet-stream;\r\n    sendfile        on;\r\n    keepalive_timeout  65;\r\n\r\n    gzip on;\r\n    gzip_types text\/plain application\/x-javascript text\/css application\/xml text\/javascript application\/javascript image\/jpeg image\/gif image\/png;\r\n    gzip_vary on;\r\n\r\n    server {\r\n        listen       80;\r\n        server_name  location;\r\n\r\n        location \/ {\r\n            root \/usr\/share\/nginx\/html;\r\n            index index.html;\r\n            #\u8f6c\u53d1\u4efb\u4f55\u8bf7\u6c42\u5230 index.html\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>\u6b64\u65f6\uff0c\u5728\u672c\u5730\u6d4f\u89c8\u5668\u8bbf\u95ee location \uff0c\u5c31\u53ef\u4ee5\u8bbf\u95ee\u9759\u6001\u7ad9\u70b9\u4e86\u3002<\/p>\n<h5>\u89e3\u51b3\u8de8\u57df\u95ee\u9898<\/h5>\n<p>web \u9886\u57df\u5f00\u53d1\u4e2d\uff0c\u7ecf\u5e38\u91c7\u7528\u524d\u540e\u7aef\u5206\u79bb\u6a21\u5f0f\u3002\u8fd9\u79cd\u6a21\u5f0f\u4e0b\uff0c\u524d\u7aef\u548c\u540e\u7aef\u5206\u522b\u662f\u72ec\u7acb\u7684 web \u5e94\u7528\u7a0b\u5e8f\uff0c\u4f8b\u5982\uff1a\u540e\u7aef\u662f Java \u7a0b\u5e8f\uff0c\u524d\u7aef\u662f React \u6216 Vue \u5e94\u7528\u3002<\/p>\n<p>\u5404\u81ea\u72ec\u7acb\u7684 web app \u5728\u4e92\u76f8\u8bbf\u95ee\u65f6\uff0c\u52bf\u5fc5\u5b58\u5728\u8de8\u57df\u95ee\u9898\u3002\u89e3\u51b3\u8de8\u57df\u95ee\u9898\u4e00\u822c\u6709\u4e24\u79cd\u601d\u8def\uff1a<\/p>\n<h6>1.CORS<\/h6>\n<p>\u5728\u540e\u7aef\u670d\u52a1\u5668\u8bbe\u7f6e HTTP \u54cd\u5e94\u5934\uff0c\u628a\u4f60\u9700\u8981\u5141\u8bb8\u8bbf\u95ee\u7684\u57df\u540d\u52a0\u5165 <code>Access-Control-Allow-Origin<\/code> \u4e2d.<\/p>\n<h6>2.jsonp<\/h6>\n<p>\u628a\u540e\u7aef\u6839\u636e\u8bf7\u6c42\uff0c\u6784\u9020 json \u6570\u636e\uff0c\u5e76\u8fd4\u56de\uff0c\u524d\u7aef\u7528 jsonp \u8de8\u57df\u3002<\/p>\n<p>\u8fd9\u4e24\u79cd\u601d\u8def\uff0c\u672c\u6587\u4e0d\u5c55\u5f00\u8ba8\u8bba\u3002<\/p>\n<p>\u9700\u8981\u8bf4\u660e\u7684\u662f\uff0cnginx \u6839\u636e\u7b2c\u4e00\u79cd\u601d\u8def\uff0c\u4e5f\u63d0\u4f9b\u4e86\u4e00\u79cd\u89e3\u51b3\u8de8\u57df\u7684\u89e3\u51b3\u65b9\u6848\u3002<\/p>\n<p>\u4e3e\u4f8b\uff1a<a class=\"url\" href=\"http:\/\/www.baidu.com\" target=\"_blank\" rel=\"noopener noreferrer\">www.baidu.com<\/a> \u7f51\u7ad9\u662f\u7531\u4e00\u4e2a\u524d\u7aef app \uff0c\u4e00\u4e2a\u540e\u7aef app \u7ec4\u6210\u7684\u3002\u524d\u7aef\u7aef\u53e3\u53f7\u4e3a 9000\uff0c \u540e\u7aef\u7aef\u53e3\u53f7\u4e3a 8080\u3002<\/p>\n<p>\u524d\u7aef\u548c\u540e\u7aef\u5982\u679c\u4f7f\u7528 http \u8fdb\u884c\u4ea4\u4e92\u65f6\uff0c\u8bf7\u6c42\u4f1a\u88ab\u62d2\u7edd\uff0c\u56e0\u4e3a\u5b58\u5728\u8de8\u57df\u95ee\u9898\u3002\u6765\u770b\u770b\uff0cnginx \u662f\u600e\u4e48\u89e3\u51b3\u7684\u5427\uff1a<\/p>\n<p>\u9996\u5148\uff0c\u5728 enable-cors.conf \u6587\u4ef6\u4e2d\u8bbe\u7f6e cors \uff1a<\/p>\n<pre><code># allow origin list\r\nset $ACAO '*';\r\n\r\n# set single origin\r\nif ($http_origin ~* (www.helloworld.com)$) {\r\n  set $ACAO $http_origin;\r\n}\r\n\r\nif ($cors = \"trueget\") {\r\n    add_header 'Access-Control-Allow-Origin' \"$http_origin\";\r\n    add_header 'Access-Control-Allow-Credentials' 'true';\r\n    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';\r\n    add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';\r\n}\r\n\r\nif ($request_method = 'OPTIONS') {\r\n  set $cors \"${cors}options\";\r\n}\r\n\r\nif ($request_method = 'GET') {\r\n  set $cors \"${cors}get\";\r\n}\r\n\r\nif ($request_method = 'POST') {\r\n  set $cors \"${cors}post\";\r\n}\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u5728\u4f60\u7684\u670d\u52a1\u5668\u4e2d <code>include enable-cors.conf<\/code> \u6765\u5f15\u5165\u8de8\u57df\u914d\u7f6e\uff1a<\/p>\n<pre><code># ----------------------------------------------------\r\n# \u6b64\u6587\u4ef6\u4e3a\u9879\u76ee nginx \u914d\u7f6e\u7247\u6bb5\r\n# \u53ef\u4ee5\u76f4\u63a5\u5728 nginx config \u4e2d include\uff08\u63a8\u8350\uff09\r\n# \u6216\u8005 copy \u5230\u73b0\u6709 nginx \u4e2d\uff0c\u81ea\u884c\u914d\u7f6e\r\n# www.baidu.com \u57df\u540d\u9700\u914d\u5408 dns hosts \u8fdb\u884c\u914d\u7f6e\r\n# \u5176\u4e2d\uff0capi \u5f00\u542f\u4e86 cors\uff0c\u9700\u914d\u5408\u672c\u76ee\u5f55\u4e0b\u53e6\u4e00\u4efd\u914d\u7f6e\u6587\u4ef6\r\n# ----------------------------------------------------\r\nupstream front_server{\r\n  server www.baidu.com:9000;\r\n}\r\nupstream api_server{\r\n  server www.baidu.com:8080;\r\n}\r\n\r\nserver {\r\n  listen       80;\r\n  server_name  www.baidu.com;\r\n\r\n  location ~ ^\/api\/ {\r\n    include enable-cors.conf;\r\n    proxy_pass http:\/\/api_server;\r\n    rewrite \"^\/api\/(.*)$\" \/$1 break;\r\n  }\r\n\r\n  location ~ ^\/ {\r\n    proxy_pass http:\/\/front_server;\r\n  }\r\n}\r\n<\/code><\/pre>\n<h4>\u56db\u3001Nginx \u95ee\u9898\u96c6<\/h4>\n<h5>Nginx \u51fa\u73b0\u5927\u91cf TIME_WAIT<\/h5>\n<p>\u68c0\u6d4bTIME_WAIT\u72b6\u6001\u8bed\u53e5<\/p>\n<pre><code>[root@izf8zf4p0dwlngmnn6hinkz conf.d]# netstat -n | awk '\/^tcp\/ {++S[$NF]} END {for(a in S) print a, S[a]}'\r\nSYN_RECV 7\r\nESTABLISHED 756\r\nFIN_WAIT1 21\r\nSYN_SENT 3\r\nTIME_WAIT 2000\r\n<\/code><\/pre>\n<p>\u72b6\u6001\u89e3\u6790\uff1a<\/p>\n<ul>\n<li><code>CLOSED<\/code> &#8211; \u65e0\u8fde\u63a5\u662f\u6d3b\u52a8\u7684\u6216\u6b63\u5728\u8fdb\u884c<\/li>\n<li><code>LISTEN<\/code> &#8211; \u670d\u52a1\u5668\u5728\u7b49\u5f85\u8fdb\u5165\u547c\u53eb<\/li>\n<li><code>SYN_RECV<\/code> &#8211; \u4e00\u4e2a\u8fde\u63a5\u8bf7\u6c42\u5df2\u7ecf\u5230\u8fbe\uff0c\u7b49\u5f85\u786e\u8ba4<\/li>\n<li><code>SYN_SENT<\/code> &#8211; \u5e94\u7528\u5df2\u7ecf\u5f00\u59cb\uff0c\u6253\u5f00\u4e00\u4e2a\u8fde\u63a5<\/li>\n<li><code>ESTABLISHED<\/code> &#8211; \u6b63\u5e38\u6570\u636e\u4f20\u8f93\u72b6\u6001<\/li>\n<li><code>FIN_WAIT1<\/code> &#8211; \u5e94\u7528\u8bf4\u5b83\u5df2\u7ecf\u5b8c\u6210<\/li>\n<li><code>FIN_WAIT2<\/code> &#8211; \u53e6\u4e00\u8fb9\u5df2\u540c\u610f\u91ca\u653e<\/li>\n<li><code>ITMED_WAIT<\/code> &#8211; \u7b49\u5f85\u6240\u6709\u5206\u7ec4\u6b7b\u6389<\/li>\n<li><code>CLOSING<\/code> &#8211; \u4e24\u8fb9\u540c\u65f6\u5c1d\u8bd5\u5173\u95ed<\/li>\n<li><code>TIME_WAIT<\/code> &#8211; \u53e6\u4e00\u8fb9\u5df2\u521d\u59cb\u5316\u4e00\u4e2a\u91ca\u653e<\/li>\n<li><code>LAST_ACK<\/code> &#8211; \u7b49\u5f85\u6240\u6709\u5206\u7ec4\u6b7b\u6389<\/li>\n<\/ul>\n<p>\u89e3\u51b3\u529e\u6cd5<\/p>\n<p>\u6267\u884c <code>vim \/etc\/sysctl.conf<\/code>\uff0c\u5e76\u6dfb\u52a0\u4e0b\u9762\u5b57\u6bb5\uff1a<\/p>\n<pre><code>net.ipv4.tcp_syncookies = 1\r\nnet.ipv4.tcp_tw_reuse = 1\r\nnet.ipv4.tcp_tw_recycle = 1\r\nnet.ipv4.tcp_fin_timeout = 30\r\n<\/code><\/pre>\n<p>\u6267\u884c \/<code>sbin\/sysctl -p<\/code> \u8ba9\u4fee\u6539\u751f\u6548\u3002<\/p>\n<h5>\u4e0a\u4f20\u6587\u4ef6\u5927\u5c0f\u9650\u5236<\/h5>\n<p>\u95ee\u9898\u73b0\u8c61\uff1a<\/p>\n<p>\u663e\u793a\u9519\u8bef\u4fe1\u606f\uff1a<strong>413 Request Entity Too Large<\/strong>\u3002<\/p>\n<p>\u610f\u601d\u662f\u8bf7\u6c42\u7684\u5185\u5bb9\u8fc7\u5927\uff0c\u6d4f\u89c8\u5668\u4e0d\u80fd\u6b63\u786e\u663e\u793a\u3002\u5e38\u89c1\u7684\u60c5\u51b5\u662f\u53d1\u9001 <code>POST<\/code> \u8bf7\u6c42\u6765\u4e0a\u4f20\u5927\u6587\u4ef6\u3002<\/p>\n<p>\u89e3\u51b3\u529e\u6cd5\uff1a<\/p>\n<ul>\n<li>\u53ef\u4ee5\u5728 <code>http<\/code> \u6a21\u5757\u4e2d\u8bbe\u7f6e\uff1a<code>client_max_body_size  20m;<\/code><\/li>\n<li>\u53ef\u4ee5\u5728 <code>server<\/code> \u6a21\u5757\u4e2d\u8bbe\u7f6e\uff1a<code>client_max_body_size  20m;<\/code><\/li>\n<li>\u53ef\u4ee5\u5728 <code>location<\/code> \u6a21\u5757\u4e2d\u8bbe\u7f6e\uff1a<code>client_max_body_size  20m;<\/code><\/li>\n<\/ul>\n<p>\u4e09\u8005\u533a\u522b\u662f\uff1a<\/p>\n<ul>\n<li>\u5982\u679c\u6587\u5927\u5c0f\u9650\u5236\u8bbe\u7f6e\u5728 <code>http<\/code> \u6a21\u5757\u4e2d\uff0c\u5219\u5bf9\u6240\u6709 Nginx \u6536\u5230\u7684\u8bf7\u6c42\u3002<\/li>\n<li>\u5982\u679c\u6587\u5927\u5c0f\u9650\u5236\u8bbe\u7f6e\u5728 <code>server<\/code> \u6a21\u5757\u4e2d\uff0c\u5219\u53ea\u5bf9\u8be5 <code>server<\/code> \u6536\u5230\u7684\u8bf7\u6c42\u751f\u6548\u3002<\/li>\n<li>\u5982\u679c\u6587\u5927\u5c0f\u9650\u5236\u8bbe\u7f6e\u5728 <code>location<\/code> \u6a21\u5757\u4e2d\uff0c\u5219\u53ea\u5bf9\u5339\u914d\u4e86 <code>location<\/code> \u8def\u7531\u89c4\u5219\u7684\u8bf7\u6c42\u751f\u6548\u3002<\/li>\n<\/ul>\n<h5>\u8bf7\u6c42\u65f6\u95f4\u9650\u5236<\/h5>\n<p>\u95ee\u9898\u73b0\u8c61\uff1a<\/p>\n<p>\u8bf7\u6c42\u65f6\u95f4\u8f83\u957f\uff0c\u94fe\u63a5\u88ab\u91cd\u7f6e\u9875\u9762\u5237\u65b0\u3002\u5e38\u89c1\u7684\u60c5\u51b5\u662f\uff1a\u4e0a\u4f20\u3001\u4e0b\u8f7d\u5927\u6587\u4ef6\u3002<\/p>\n<p>\u89e3\u51b3\u529e\u6cd5\uff1a<\/p>\n<p>\u4fee\u6539\u8d85\u65f6\u65f6\u95f4<\/p>\n<p>&nbsp;<\/p>\n<p>\u53c2\u8003\uff1a<\/p>\n<p><a class=\"url\" href=\"https:\/\/dunwu.github.io\/nginx-tutorial\/#\/README\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/dunwu.github.io\/nginx-tutorial\/#\/README<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001Nginx \u7b80\u4ecb 1.\u4ec0\u4e48\u662f Nginx? Nginx\uff08engine x\uff09\u662f\u4e00\u6b3e\u8f7b\u91cf\u7ea7\u7684 Web \u670d\u52a1\u5668  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[283],"tags":[215],"class_list":["post-1662","post","type-post","status-publish","format-standard","hentry","category-nginx","tag-nginx"],"_links":{"self":[{"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/posts\/1662","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/comments?post=1662"}],"version-history":[{"count":1,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/posts\/1662\/revisions"}],"predecessor-version":[{"id":1663,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/posts\/1662\/revisions\/1663"}],"wp:attachment":[{"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/media?parent=1662"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/categories?post=1662"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/tags?post=1662"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}