×ðÁú¿­Ê±¹ÙÍøµÇ¼

14¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡

½ñÌìÀ´ºÍ¸÷ÈËÁÄÁÄNginxÔÚÎÒÃÇÏÖʵӦÔËÓÃÖеÄһЩºÜÊÇÓÐÓõĵã¡£

ÔçÆÚµÄÓªÒµ¶¼ÊÇ»ùÓÚµ¥Ìå½Úµã°²ÅÅ£¬ÓÉÓÚÇ°ÆÚ»á¼ûÁ÷Á¿²»´ó£¬Òò´Ëµ¥Ìå½á¹¹Ò²¿ÉÖª×ãÐèÇ󣬵«Ëæ×ÅÓªÒµÔöÌí£¬Á÷Á¿Ò²Ô½À´Ô½´ó£¬ÄÇô×îÖÕµ¥Ì¨Ð§ÀÍÆ÷Êܵ½µÄ»á¼ûѹÁ¦Ò²»áÖð²½Ôö¸ß¡£Ê±¼äÒ»³¤£¬µ¥Ì¨Ð§ÀÍÆ÷ÐÔÄÜÎÞ·¨¸úÉÏÓªÒµÔöÌí£¬¾Í»áÔì³ÉÏßÉÏƵÈÔå´»úµÄÕ÷Ï󱬷¢£¬×îÖÕµ¼ÖÂϵͳ̱»¾ÎÞ·¨¼ÌÐø´¦ÀíÓû§µÄÇëÇó¡£

´ÓÉÏÃæµÄÐÎòÖУ¬Ö÷Òª±£´æÁ½¸öÎÊÌ⣺

¢Ùµ¥Ìå½á¹¹µÄ°²ÅÅ·½·¨ÎÞ·¨³ÐÔØÈÕÒæÔöÌíµÄÓªÒµÁ÷Á¿¡£

¢Úµ±ºó¶Ë½Úµãå´»úºó£¬Õû¸öϵͳ»áÏÝÈë̱»¾£¬µ¼ÖÂÕû¸öÏîÄ¿²»¿ÉÓá£

Òò´ËÔÚÕâÖÖÅä¾°Ï£¬ÒýÈ븺ÔØƽºâÊÖÒÕ¿É´øÀ´µÄÊÕÒ棺

¡¸ÏµÍ³µÄ¸ß¿ÉÓ㺡¹ µ±Ä³¸ö½Úµãå´»úºó¿ÉÒÔѸËÙ½«Á÷Á¿×ªÒÆÖÁÆäËû½Úµã¡£

¡¸ÏµÍ³µÄ¸ßÐÔÄÜ£º¡¹ ¶ą̀ЧÀÍÆ÷ÅäºÏ¶ÔÍâÌṩЧÀÍ£¬ÎªÕû¸öϵͳÌṩÁ˸ü¸ß¹æÄ£µÄÍÌÍ¡£

¡¸ÏµÍ³µÄÍØÕ¹ÐÔ£º¡¹ µ±ÓªÒµÔٴηºÆðÔöÌí»òήÃÒʱ£¬¿ÉÔÙ¼ÓÈë/ïÔÌ­½Úµã£¬ÎÞаÉìËõ¡£

OK~£¬¼ÈÈ»ÒýÈ븺ÔØƽºâÊÖÒտɸøÎÒÃÇ´øÀ´ÔÆÔÆÖØ´óµÄÀûÒ棬ÄÇôÓÖÓÐÄÇЩ¼Æ»®¿É¹©Ñ¡ÔñÄØ£¿Ö÷ÒªÓÐÁ½ÖÖ¸ºÔؼƻ®£¬¡¸¡¸Ó²¼þ²ãÃæÓëÈí¼þ²ãÃ桹¡¹ £¬½ÏÁ¿³£ÓõÄÓ²¼þ¸ºÔØÆ÷ÓÐA10¡¢F5µÈ£¬µ«ÕâЩ»úе¶¯éü´ó¼¸ÍòÒÔÖ¼¸Ê®ÍòµÄ±¾Ç®£¬Òò´ËÒ»Ñùƽ³£´óÐÍÆóÒµ»á½ÓÄɸüƻ®£¬ÈçÒøÐС¢¹úÆó¡¢ÑëÆóµÈ¡£¶ø±¾Ç®ÓÐÏÞ£¬µ«ÒÀ¾ÉÏë×ö¸ºÔØƽºâµÄÏîÄ¿£¬ÄÇô¿ÉÔÚÈí¼þ²ãÃæʵÏÖ£¬Èçµä·¶µÄNginxµÈ£¬Èí¼þ²ãµÄ¸ºÔØÒ²ÊDZ¾ÎĵÄÖص㣬ÊÂʵBossÃǵÄ×¼ÔòÖ®Ò»¾ÍÊÇ£º¡¸¡¸ÄÜ¿¿ÊÖÒÕʵÏֵľÍÖ»¹Ü²»»¨Ç®¡£¡¹¡¹

Java¿ª·¢ÕßÔÚÏßË¢ÌâÉñÆ÷

Ò»¡¢ÐÔÄܹÖÊÞ-Nginx¿´·¨ÉîÈëdz³ö

NginxÊÇÏÖÔÚ¸ºÔØƽºâÊÖÒÕÖеÄÖ÷Á÷¼Æ»®£¬ÏÕЩ¾ø´ó²¿·ÖÏîÄ¿¶¼»áʹÓÃËü£¬NginxÊÇÒ»¸öÇáÁ¿¼¶µÄ¸ßÐÔÄÜHTTP·´ÏòÊðÀíЧÀÍÆ÷£¬Í¬Ê±ËüÒ²ÊÇÒ»¸öͨÓÃÀàÐ͵ÄÊðÀíЧÀÍÆ÷£¬Ö§³Ö¾ø´ó²¿·ÖЭÒ飬ÈçTCP¡¢UDP¡¢SMTP¡¢HTTPSµÈ¡£

NginxÓëRedisÏàͬ£¬¶¼ÊÇ»ùÓڶ෸´ÓÃÄ£×Ó¹¹½¨³öµÄ²úÆ·£¬Òò´ËËüÓëRedisͬÑù¾ß±¸ ¡¸¡¸×ÊÔ´Õ¼ÓÃÉÙ¡¢²¢·¢Ö§³Ö¸ß¡¹¡¹ µÄÌص㣬ÔÚÀíÂÛÉϵ¥½ÚµãµÄNginxͬʱ֧³Ö5W²¢·¢ÅþÁ¬£¬¶øÏÖʵÉú²úÇéÐÎÖУ¬Ó²¼þ»ù´¡µ½Î»ÔÙÍŽá¼òÆÓµ÷ÓźóȷʵÄִܵï¸ÃÊýÖµ¡£

ÏÈÀ´¿´¿´NginxÒýÈëÇ°ºó£¬¿Í»§¶ËÇëÇó´¦ÀíÁ÷³ÌµÄ±ÈÕÕ£º

Ô­±¾¿Í»§¶ËÊÇÖ±½ÓÇëÇóÄ¿µÄЧÀÍÆ÷£¬ÓÉÄ¿µÄЧÀÍÆ÷Ö±½ÓÍê³ÉÇëÇó´¦ÀíÊÂÇ飬µ«¼ÓÈëNginxºó£¬ËùÓеÄÇëÇó»áÏȾ­ÓÉNginx£¬ÔÙÓÉÆä¾ÙÐзַ¢µ½ÏêϸµÄЧÀÍÆ÷´¦Àí£¬´¦ÀíÍê³ÉºóÔÙ·µ»ØNginx£¬×îºóÓÉNginx½«×îÖÕµÄÏìӦЧ¹û·µ»Ø¸ø¿Í»§¶Ë¡£

ÏàʶÁËNginxµÄ»ù±¾¿´·¨ºó£¬ÔÙÀ´¿ìËٴһÏÂÇéÐΣ¬ÒÔ¼°ÏàʶһЩNginxµÄ¸ß¼¶ÌØÕ÷£¬ÈçÐÂÎÅÊèÉ¢¡¢×ÊԴѹËõ¡¢»º´æÉèÖá¢IPºÚÃûµ¥¡¢¸ß¿ÉÓðü¹ÜµÈ¡£

¶þ¡¢NginxÇéÐδ

Ê×ÏȽ¨ÉèNginxµÄĿ¼²¢½øÈ룺

[root@localhost]# mkdir /soft && mkdir /soft/nginx/  
[root@localhost]# cd /soft/nginx/

µÇ¼ºó¸´ÖÆ

ÏÂÔØNginxµÄ×°Öðü£¬¿ÉÒÔͨ¹ýFTP¹¤¾ßÉÏ´«ÀëÏßÇéÐΰü£¬Ò²¿Éͨ¹ýwgetÏÂÁîÔÚÏß»ñȡװÖðü£º

[root@localhost]# wget https://nginx.org/download/nginx-1.21.6.tar.gz

µÇ¼ºó¸´ÖÆ

ûÓÐwgetÏÂÁîµÄ¿Éͨ¹ýyumÏÂÁî×°Öãº

[root@localhost]# yum -y install wget

µÇ¼ºó¸´ÖÆ

½âѹNginxµÄѹËõ°ü£º

[root@localhost]# tar -xvzf nginx-1.21.6.tar.gz

µÇ¼ºó¸´ÖÆ

ÏÂÔز¢×°ÖÃNginxËùÐèµÄÒÀÀµ¿âºÍ°ü£º

[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ gcc-c++  
[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ pcre pcre-devel4  
[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ zlib zlib-devel  
[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ openssl openssl-devel

µÇ¼ºó¸´ÖÆ

Ò²¿ÉÒÔͨ¹ýyumÏÂÁîÒ»¼üÏÂÔØ£¨ÍƼöÉÏÃæÄÄÖÖ·½·¨£©£º

[root@localhost]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

µÇ¼ºó¸´ÖÆ

Ö´ÐÐÍê³Éºó£¬È»ºólsÉó²éĿ¼Îļþ£¬»á¿´Ò»´ó¶ÑÒÀÀµ£º

½ô½Ó×Åͨ¹ýrpmÏÂÁîÒÀ´Î½«ÒÀÀµ°üÒ»¸ö¸ö¹¹½¨£¬»òÕßͨ¹ýÈçÏÂÖ¸ÁîÒ»¼ü×°ÖÃËùÓÐÒÀÀµ°ü£º

[root@localhost]# rpm -ivh --nodeps *.rpm

µÇ¼ºó¸´ÖÆ

½øÈë½âѹºóµÄnginxĿ¼£¬È»ºóÖ´ÐÐNginxµÄÉèÖþ籾£¬ÎªºóÐøµÄ×°ÖÃÌáÇ°ÉèÖúÃÇéÐΣ¬Ä¬ÈÏλÓÚ/usr/local/nginx/Ŀ¼Ï£¨¿É×Ô½ç˵Ŀ¼£©£º

[root@localhost]# cd nginx-1.21.6  
[root@localhost]# ./configure --prefix=/soft/nginx/

µÇ¼ºó¸´ÖÆ

±àÒë²¢×°ÖÃNginx£º

[root@localhost]# make && make install

µÇ¼ºó¸´ÖÆ

×îºó»Øµ½Ç°ÃæµÄ/soft/nginx/Ŀ¼£¬ÊäÈëls¼´¿ÉÍû¼û×°ÖÃnginxÍê³ÉºóÌìÉúµÄÎļþ¡£

ÐÞ¸Ä×°ÖúóÌìÉúµÄconfĿ¼ÏµÄnginx.confÉèÖÃÎļþ£º

[root@localhost]# vi conf/nginx.conf  
    Ð޸Ķ˿ںţºlisten    80;  
 ÐÞ¸ÄIPµØµã£ºserver_name  ÄãÄ¿½ñ»úеµÄÍâµØIP(ÏßÉÏÉèÖÃÓòÃû);

µÇ¼ºó¸´ÖÆ

Öƶ©ÉèÖÃÎļþ²¢Æô¶¯Nginx£º

[root@localhost]# sbin/nginx -c conf/nginx.conf  
[root@localhost]# ps aux | grep nginx

µÇ¼ºó¸´ÖÆ

NginxÆäËû²Ù×÷ÏÂÁ

sbin/nginx -t -c conf/nginx.conf # ¼ì²âÉèÖÃÎļþÊÇ·ñÕý³£  
sbin/nginx -s reload -c conf/nginx.conf # ÐÞ¸ÄÉèÖúóƽ»¬ÖØÆô  
sbin/nginx -s quit # ÓÅÑŹرÕNginx£¬»áÔÚÖ´ÐÐÍêÄ¿½ñµÄʹÃüºóÔÙÍ˳ö  
sbin/nginx -s stop # Ç¿ÖÆÖÕÖ¹Nginx£¬²»¹ÜÄ¿½ñÊÇ·ñÓÐʹÃüÔÚÖ´ÐÐ

µÇ¼ºó¸´ÖÆ

¿ª·Å80¶Ë¿Ú£¬²¢¸üзÀ»ðǽ£º

[root@localhost]# firewall-cmd --zone=public --add-port=80/tcp --permanent  
[root@localhost]# firewall-cmd --reload  
[root@localhost]# firewall-cmd --zone=public --list-ports

µÇ¼ºó¸´ÖÆ

?ÔÚWindows/MacµÄä¯ÀÀÆ÷ÖУ¬Ö±½ÓÊäÈë¸Õ¸ÕÉèÖõÄIPµØµã»á¼ûNginx£º

×îÖÕ¿´µ½ÈçÉϵÄNginx½Ó´ý½çÃ棬´ú±íNginx×°ÖÃÍê³É¡£

Èý¡¢Nginx·´ÏòÊðÀí-¸ºÔØƽºâ

Ê×ÏÈͨ¹ýSpringBoot+Freemarker¿ìËٴһ¸öWEBÏîÄ¿£ºspringboot-web-nginx£¬È»ºóÔÚ¸ÃÏîÄ¿ÖУ¬½¨ÉèÒ»¸öIndexNginxController.javaÎļþ£¬Âß¼­ÈçÏ£º

@Controller  
public class IndexNginxController {  
    @Value("${server.port}")  
    private String port;  
  
    @RequestMapping("/")  
    public ModelAndView index(){  
        ModelAndView model = new ModelAndView();  
        model.addObject("port", port);  
        model.setViewName("index");  
        return model;  
    }  
}

µÇ¼ºó¸´ÖÆ

ÔÚ¸ÃControllerÀàÖУ¬±£´æÒ»¸ö³ÉÔ±±äÁ¿£ºport£¬ËüµÄÖµ¼´ÊÇ´Óapplication.propertiesÉèÖÃÎļþÖлñÈ¡server.portÖµ¡£µ±·ºÆð»á¼û/×ÊÔ´µÄÇëÇóʱ£¬Ìøתǰ¶ËindexÒ³Ã棬²¢½«¸ÃֵЯ´ø·µ»Ø¡£

Ç°¶ËµÄindex.ftlÎļþ´úÂëÈçÏ£º

<html>  
    <head>  
        <title>NginxÑÝʾҳÃæ</title>  
        <link href="nginx_style.css" rel="stylesheet" type="text/css"/>  
    </head>  
    <body>  
        <div style="border: 2px solid red;margin: auto;width: 800px;text-align: center">  
            <div  id="nginx_title">  
                <h1>½Ó´ýÀ´µ½ÐÜè¸ß¼¶»áËù£¬ÎÒÊÇÖñ×Ó${port}ºÅ£¡</h1>  
            </div>  
        </div>  
    </body>  
</html>

µÇ¼ºó¸´ÖÆ

´ÓÉÏ¿ÉÒÔ¿´³öÆäÂß¼­²¢²»Öش󣬽öÊÇ´ÓÏìÓ¦ÖлñÈ¡ÁËportÊä³ö¡£

OK~£¬Ìõ¼þÊÂÇé×¼±¸Í£µ±ºó£¬ÔÙ¼òÆÓÐÞ¸ÄÒ»ÏÂnginx.confµÄÉèÖü´¿É£º

upstream nginx_boot{  
   # 30sÄÚ¼ì²éÐÄÌø·¢ËÍÁ½´Î°ü£¬Î´»Ø¸´¾Í´ú±í¸Ã»úе崻ú£¬ÇëÇó·Ö·¢È¨ÖرÈΪ1:2  
   server 192.168.0.000:8080 weight=100 max_fails=2 fail_timeout=30s;   
   server 192.168.0.000:8090 weight=200 max_fails=2 fail_timeout=30s;  
   # ÕâÀïµÄIPÇëÉèÖóÉÄãWEBЧÀÍËùÔڵĻúеIP  
}  
  
server {  
    location / {  
        root   html;  
        # ÉèÖÃÒ»ÏÂindexµÄµØµã£¬×îºó¼ÓÉÏindex.ftl¡£  
        index  index.html index.htm index.jsp index.ftl;  
        proxy_set_header Host $host;  
        proxy_set_header X-Real-IP $remote_addr;  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
        # ÇëÇ󽻸øÃûΪnginx_bootµÄupstreamÉÏ  
        proxy_pass http://nginx_boot;  
    }  
}

µÇ¼ºó¸´ÖÆ

ÖÁ´Ë£¬ËùÓеÄÌõ¼þÊÂÇé×¼±¸Í£µ±£¬½ô½Ó×ÅÔÙÆô¶¯Nginx£¬È»ºóÔÙÆô¶¯Á½¸öwebЧÀÍ£¬µÚÒ»¸öWEBЧÀÍÆô¶¯Ê±£¬ÔÚapplication.propertiesÉèÖÃÎļþÖУ¬½«¶Ë¿ÚºÅ¸ÄΪ8080£¬µÚ¶þ¸öWEBЧÀÍÆô¶¯Ê±£¬½«Æä¶Ë¿ÚºÅ¸ÄΪ8090¡£

×îÖÕÀ´¿´¿´Ð§¹û£º

¸ºÔØƽºâЧ¹û-¶¯Í¼ÑÝʾ

ÓÉÓÚÉèÖÃÁËÇëÇó·Ö·¢µÄȨÖØ£¬8080¡¢8090µÄȨÖرÈΪ2:1£¬Òò´ËÇëÇó»áƾ֤ȨÖرȾù̯µ½Ã¿Ì¨»úе£¬Ò²¾ÍÊÇ8080Ò»´Î¡¢8090Á½´Î¡¢8080Ò»´Î……

Java¿ª·¢ÕßÔÚÏßË¢ÌâÉñÆ÷

NginxÇëÇó·Ö·¢Ô­Àí

¿Í»§¶Ë·¢³öµÄÇëÇó192.168.12.129×îÖÕ»áת±äΪ£ºhttp://192.168.12.129:80/£¬È»ºóÔÙÏòÄ¿µÄIPÌᳫÇëÇó£¬Á÷³ÌÈçÏ£º

ÇëÇó·Ö·¢Ô­Àí

ÓÉÓÚNginx¼àÌýÁË192.168.12.129µÄ80¶Ë¿Ú£¬ÒÔÊÇ×îÖÕ¸ÃÇëÇó»áÕÒµ½NginxÀú³Ì£»

NginxÊ×ÏÈ»áƾ֤ÉèÖõÄlocation¹æÔò¾ÙÐÐÆ¥Å䣬ƾ֤¿Í»§¶ËµÄÇëÇ󷾶/£¬»á¶¨Î»µ½location /{}¹æÔò£»

È»ºóƾ֤¸ÃlocationÖÐÉèÖõÄproxy_pass»áÔÙÕÒµ½ÃûΪnginx_bootµÄupstream£»

×îºóƾ֤upstreamÖеÄÉèÖÃÐÅÏ¢£¬½«ÇëÇóת·¢µ½ÔËÐÐWEBЧÀ͵Ļúе´¦Àí£¬ÓÉÓÚÉèÖÃÁ˶à¸öWEBЧÀÍ£¬ÇÒÉèÖÃÁËȨÖØÖµ£¬Òò´ËNginx»áÒÀ´Îƾ֤ȨÖرȷַ¢ÇëÇó¡£

ËÄ¡¢NginxÐÂÎÅÊèÉ¢

ÐÂÎÅÊèÉ¢Ó¦¸ÃÊÇÌýµÄ´ÎÊý½Ï¶àµÄÐÔÄÜÓÅ»¯¼Æ»®£¬ÄÇÏÈ˼Ë÷Ò»¸öÎÊÌ⣺¡¸¡¸ÎªÊ²Ã´ÐèÒª×öÐÂÎÅÊèÉ¢ÄØ£¿Ëü´øÀ´µÄÀûÒæÊÇʲô£¿¡¹¡¹ ÆäÊÃ÷ÈÕâ¸öÎÊÌâÒ²²¢²»Äѻظ²£¬µ±Äã¸ã¶®ÁËÍøÕ¾µÄʵÖʺó£¬×ÔÈ»¾ÍÃ÷È·ÁËÐÂÎÅÊèÉ¢µÄÖ÷ÒªÐÔ¡£ÏÈÀ´ÒÔÌÔ±¦ÎªÀýÆÊÎö¿´¿´£º

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"ÌÔ±¦Ê×Ò³

µ±ä¯ÀÀÆ÷ÊäÈëwww.taobao.com»á¼ûÌÔ±¦Ê×ҳʱ£¬·­¿ª¿ª·¢Õßµ÷ÊÔ¹¤¾ß¿ÉÒÔºÜÏÔ×ŵĿ´µ½£¬Ê×Ò³¼ÓÔػ᷺Æð100+µÄÇëÇóÊý£¬¶øÕý³£ÏîÄ¿¿ª·¢Ê±£¬¾²Ì¬×ÊÔ´Ò»Ñùƽ³£»á·ÅÈëµ½resources/static/Ŀ¼Ï£º

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"IDEA ¹¤³Ì½á¹¹

ÔÚÏîÄ¿ÉÏÏß°²ÅÅʱ£¬ÕâЩ¾²Ì¬×ÊÔ´»áÒ»Æð´ò³É°ü£¬ÄÇ´Ëʱ˼Ë÷Ò»¸öÎÊÌ⣺¡¸¡¸¼ÙÉèÌÔ±¦Ò²ÊÇÕâÑù¸ÉµÄ£¬ÄÇôÊ×Ò³¼ÓÔØʱµÄÇëÇó×îÖÕ»áÈ¥µ½ÄĶù±»´¦Àí£¿¡¹¡¹ ÃÕµ×ÎãÓ¹ÖÃÒÉ£¬Ê×Ò³100+µÄËùÓÐÇëÇ󶼻áÀ´µ½°²ÅÅWEBЧÀ͵Ļúе´¦Àí£¬ÄÇÔò´ú±í×ÅÒ»¸ö¿Í»§¶ËÇëÇóÌÔ±¦Ê×Ò³£¬¾Í»á¶Ôºó¶ËЧÀÍÆ÷Ôì³É100+µÄ²¢·¢ÇëÇ󡣺ÁÎÞÒÉÎÊ£¬Õâ¹ØÓÚºó¶ËЧÀÍÆ÷µÄѹÁ¦ÊÇÓÈΪÖØ´óµÄ¡£

µ«´ËʱÎÞ·ÁÆÊÎö¿´¿´£¬Ê×Ò³100+µÄÇëÇóÖУ¬ÊDz»ÊÇÖÁÉÙÓÐ60+ÊÇÊôÓÚ*.js¡¢*.css¡¢*.html¡¢*.jpg…..ÕâÀྲ̬×ÊÔ´µÄÇëÇóÄØ£¿ÃÕµ×ÊÇYes¡£

¼ÈÈ»ÓÐÕâô¶àÇëÇóÊôÓÚ¾²Ì¬µÄ£¬ÕâЩ×ÊÔ´»òÐíÂÊÇéÐÎÏ£¬³¤Ê±¼äÒ²²»»á·ºÆð±ä»»£¬ÄÇΪºÎ»¹ÒªÈÃÕâЩÇëÇ󵽺ó¶ËÔÙ´¦ÀíÄØ£¿Äܲ»¿ÉÔÚ´Ë֮ǰ¾ÍÌáÇ°´¦Àíµô£¿ËäÈ»OK£¬Òò´Ë¾­Ì«¹ýÎöÖ®ºóÄܹ»Ã÷È·Ò»µã£º¡¸¡¸×öÁËÐÂÎÅÊèÉ¢Ö®ºó£¬ÖÁÉÙÄܹ»Èúó¶ËЧÀÍïÔÌ­Ò»°ëÒÔÉϵIJ¢·¢Á¿¡£¡¹¡¹ µ½´Ëʱ¸÷ÈËÓ¦¸ÃÃ÷È·ÁËÐÂÎÅÊèÉ¢Äܹ»´øÀ´µÄÐÔÄÜÊÕÒæÊÂʵÓжà´ó¡£


OK~£¬¸ãÇåÎúÐÂÎÅÊèÉ¢µÄÐëÒªÐÔÖ®ºó£¬ÔõÑùʵÏÖÐÂÎÅÊèÉ¢ÄØ£¿×ÅʵºÜÊǼòÆÓ£¬ÊÃ÷ÈÕ½¿´¿´¡£

¢ÙÏÈÔÚ°²ÅÅNginxµÄ»úе£¬NginxĿ¼Ï½¨ÉèÒ»¸öĿ¼static_resources£º

mkdir static_resources

µÇ¼ºó¸´ÖÆ

¢Ú½«ÏîÄ¿ÖÐËùÓеľ²Ì¬×ÊÔ´ËùÓп½±´µ½¸ÃĿ¼Ï£¬´Ëºó½«ÏîÄ¿Öеľ²Ì¬×ÊÔ´ÒƳýÖØдò°ü¡£

¢ÛÉÔ΢ÐÞ¸ÄÒ»ÏÂnginx.confµÄÉèÖã¬ÔöÌíÒ»ÌõlocationÆ¥Åä¹æÔò£º

location ~ .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){  
    root   /soft/nginx/static_resources;  
    expires 7d;  
}

µÇ¼ºó¸´ÖÆ

È»ºóÕÕ³£Æô¶¯nginxºÍÒƳýÁ˾²Ì¬×ÊÔ´µÄWEBЧÀÍ£¬Äã»á·¢Ã÷Ô­±¾µÄÑùʽ¡¢jsЧ¹û¡¢Í¼Æ¬µÈÒÀ¾ÉÓÐÓã¬ÈçÏ£º

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"

ÆäÖÐstaticĿ¼ÏµÄnginx_style.cssÎļþÒѱ»ÒƳý£¬µ«Ð§¹ûÒÀ¾É±£´æ£¨ÂÌÉ«×ÖÌå+À¶É«´ó±ß¿ò)£º

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"ÒƳýºóЧ¹û¶¯Í¼

×îºó½â¶ÁÒ»ÏÂÄÇÌõlocation¹æÔò£º

location ~ .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)

µÇ¼ºó¸´ÖÆ

~´ú±íÆ¥ÅäʱÇø·Ö¾Þϸд

.*´ú±íí§Òâ×Ö·û¶¼¿ÉÒÔ·ºÆðÁã´Î»ò¶à´Î£¬¼´×ÊÔ´Ãû²»ÏÞÖÆ

.´ú±íÆ¥Åäºó׺ÍÑÀë·û.

(html|…|css)´ú±íÆ¥ÅäÀ¨ºÅÀïËùÓо²Ì¬×ÊÔ´ÀàÐÍ

×ÛÉÏËùÊö£¬¼òÆÓÒ»¾ä»°¸ÅÊö£º¸ÃÉèÖÃÌåÏÖÆ¥ÅäÒÔ.html~.cssΪºó׺µÄËùÓÐ×ÊÔ´ÇëÇó¡£

¡¸×îºóÌáÒ»×죬Ҳ¿ÉÒÔ½«¾²Ì¬×ÊÔ´ÉÏ´«µ½ÎļþЧÀÍÆ÷ÖУ¬È»ºólocationÖÐÉèÖÃÒ»¸öеÄupstreamÖ¸Ïò¡£¡¹

Java¿ª·¢ÕßÔÚÏßË¢ÌâÉñÆ÷

Îå¡¢Nginx×ÊԴѹËõ

½¨ÉèÔÚÐÂÎÅÊèÉ¢µÄ»ù´¡Ö®ÉÏ£¬ÈôÊÇÒ»¸ö¾²Ì¬×ÊÔ´µÄSizeԽС£¬ÄÇô×ÔÈ»´«ÊäËÙÂÊ»á¸ü¿ì£¬Í¬Ê±Ò²»á¸ü½ÚÔ¼´ø¿í£¬Òò´ËÎÒÃÇÔÚ°²ÅÅÏîĿʱ£¬Ò²¿ÉÒÔͨ¹ýNginx¹ØÓÚ¾²Ì¬×ÊԴʵÏÖѹËõ´«Ê䣬һ·½Ãæ¿ÉÒÔ½ÚÔ¼´ø¿í×ÊÔ´£¬µÚ¶þ·½ÃæÒ²¿ÉÒÔ¼ÓËÙÏìÓ¦ËÙÂʲ¢ÌáÉýϵͳÕûÌåÍÌÍ¡£

ÔÚNginxÒ²ÌṩÁËÈý¸öÖ§³Ö×ÊԴѹËõµÄÄ£¿éngx_http_gzip_module¡¢ngx_http_gzip_static_module¡¢ngx_http_gunzip_module£¬ÆäÖÐngx_http_gzip_moduleÊôÓÚÄÚÖÃÄ£¿é£¬´ú±í×Å¿ÉÒÔÖ±½ÓʹÓøÃÄ£¿éϵÄһЩѹËõÖ¸ÁºóÐøµÄ×ÊԴѹËõ²Ù×÷¶¼»ùÓÚ¸ÃÄ£¿é£¬ÏÈÀ´¿´¿´Ñ¹ËõÉèÖõÄһЩ²ÎÊý/Ö¸Á

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"

ÏàʶÁËNginxÖеĻù±¾Ñ¹ËõÉèÖú󣬽ÓÏÂÀ´¿ÉÒÔÔÚNginxÖмòÆÓÉèÖÃһϣº

http{
    # ¿ªÆôѹËõ»úÖÆ
    gzip on;
    # Ö¸¶¨»á±»Ñ¹ËõµÄÎļþÀàÐÍ(Ò²¿É×Ô¼ºÉèÖÃÆäËûÀàÐÍ)
    gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;
    # ÉèÖÃѹËõ¼¶±ð£¬Ô½¸ß×ÊÔ´ÏûºÄÔ½´ó£¬µ«Ñ¹ËõЧ¹ûÔ½ºÃ
    gzip_comp_level 5;
    # ÔÚÍ·²¿ÖÐÌí¼ÓVary: Accept-Encoding£¨½¨Ò鿪Æô£©
    gzip_vary on;
    # ´¦ÀíѹËõÇëÇóµÄ»º³åÇøÊýÄ¿ºÍ¾Þϸ
    gzip_buffers 16 8k;
    # ¹ØÓÚ²»Ö§³ÖѹËõ¹¦Ð§µÄ¿Í»§¶ËÇëÇ󲻿ªÆôѹËõ»úÖÆ
    gzip_disable "MSIE [1-6]."; # µÍ°æ±¾µÄIEä¯ÀÀÆ÷²»Ö§³ÖѹËõ
    # ÉèÖÃѹËõÏìÓ¦ËùÖ§³ÖµÄHTTP×îµÍ°æ±¾
    gzip_http_version 1.1;
    # ÉèÖô¥·¢Ñ¹ËõµÄ×îСãÐÖµ
    gzip_min_length 2k;
    # ¹Ø±Õ¶Ôºó¶ËЧÀÍÆ÷µÄÏìӦЧ¹û¾ÙÐÐѹËõ
    gzip_proxied off;
}

µÇ¼ºó¸´ÖÆ

ÔÚÉÏÊöµÄѹËõÉèÖÃÖУ¬×îºóÒ»¸ögzip_proxiedÑ¡Ï¿ÉÒÔƾ֤ϵͳµÄÏÖÕæÏàÐξöÒ飬×ܹ²±£´æ¶àÖÖÑ¡Ï

off£º¹Ø±ÕNginx¶Ôºǫ́ЧÀÍÆ÷µÄÏìӦЧ¹û¾ÙÐÐѹËõ¡£

expired£ºÈôÊÇÏìӦͷÖаüÀ¨ExpiresÐÅÏ¢£¬Ôò¿ªÆôѹËõ¡£

no-cache£ºÈôÊÇÏìӦͷÖаüÀ¨Cache-Control:no-cacheÐÅÏ¢£¬Ôò¿ªÆôѹËõ¡£

no-store£ºÈôÊÇÏìӦͷÖаüÀ¨Cache-Control:no-storeÐÅÏ¢£¬Ôò¿ªÆôѹËõ¡£

private£ºÈôÊÇÏìӦͷÖаüÀ¨Cache-Control:privateÐÅÏ¢£¬Ôò¿ªÆôѹËõ¡£

no_last_modified£ºÈôÊÇÏìӦͷÖв»°üÀ¨Last-ModifiedÐÅÏ¢£¬Ôò¿ªÆôѹËõ¡£

no_etag£ºÈôÊÇÏìӦͷÖв»°üÀ¨ETagÐÅÏ¢£¬Ôò¿ªÆôѹËõ¡£

auth£ºÈôÊÇÏìӦͷÖаüÀ¨AuthorizationÐÅÏ¢£¬Ôò¿ªÆôѹËõ¡£

any£ºÎÞÌõ¼þ¶Ôºó¶ËµÄÏìӦЧ¹û¿ªÆôѹËõ»úÖÆ¡£

OK~£¬¼òÆÓÐ޸ĺÃÁËNginxµÄѹËõÉèÖú󣬿ÉÒÔÔÚÔ­±¾µÄindexÒ³ÃæÖÐÒýÈëÒ»¸öjquery-3.6.0.jsÎļþ£º

<script type="text/javascript" src="jquery-3.6.0.js"></script>

µÇ¼ºó¸´ÖÆ

»®·ÖÀ´±ÈÕÕÏÂѹËõÇ°ºóµÄÇø±ð£º

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡" ͼƬ

´ÓͼÖпÉÒÔºÜÏÔ×Å¿´³ö£¬Î´¿ªÆôѹËõ»úÖÆÇ°»á¼ûʱ£¬jsÎļþµÄԭʼ¾ÞϸΪ230K£¬µ±ÉèÖúÃѹËõºóÔÙÖØÆôNginx£¬»á·¢Ã÷Îļþ¾Þϸ´Ó230KB¡ú69KB£¬Ð§¹ûÁ¢¸Í¼ûÓ°£¡

×¢Öص㣺¢Ù¹ØÓÚͼƬ¡¢ÊÓƵÀàÐ͵ÄÊý¾Ý£¬»áĬÈÏ¿ªÆôѹËõ»úÖÆ£¬Òò´ËÒ»Ñùƽ³£ÎÞÐèÔٴοªÆôѹËõ¡£¢Ú¹ØÓÚ.jsÎļþ¶øÑÔ£¬ÐèÒªÖ¸¶¨Ñ¹ËõÀàÐÍΪapplication/javascript£¬¶ø²¢·Çtext/javascript¡¢application/x-javascript¡£

Áù¡¢Nginx»º³åÇø

ÏÈÀ´Ë¼Ë÷Ò»¸öÎÊÌ⣬½ÓÈëNginxµÄÏîÄ¿Ò»Ñùƽ³£ÇëÇóÁ÷³ÌΪ£º¡°¿Í»§¶Ë¡úNginx¡úЧÀͶˡ±£¬ÔÚÕâ¸öÀú³ÌÖб£´æÁ½¸öÅþÁ¬£º¡°¿Í»§¶Ë¡úNginx¡¢Nginx¡úЧÀͶˡ±£¬ÄÇôÁ½¸ö²î±ðµÄÅþÁ¬ËÙÂÊ·×ÆçÖ£¬¾Í»áÓ°ÏìÓû§µÄÌåÑ飨ºÃ±Èä¯ÀÀÆ÷µÄ¼ÓÔØËÙÂʸú²»ÉÏЧÀͶ˵ÄÏìÓ¦ËÙÂÊ£©¡£

×ÅʵҲ¾ÍÀàËƵçÄÔµÄÄÚ´æ¸ú²»ÉÏCPUËÙÂÊ£¬ÒÔÊǹØÓÚÓû§Ôì³ÉµÄÌåÑé¸Ð¼«²î£¬Òò´ËÔÚCPUÉè¼Æʱ¶¼»á¼ÓÈëÈý¼¶¸ßËÙ»º³åÇø£¬ÓÃÓÚ»º½âCPUºÍÄÚ´æËÙÂÊ·×ÆçÖµÄì¶Ü¡£ÔÚNginxҲͬÑù±£´æ»º³åÇøµÄ»úÖÆ£¬Ö÷ҪĿµÄ¾ÍÔÚÓÚ£º¡¸¡¸ÓÃÀ´½â¾öÁ½¸öÅþÁ¬Ö®¼äËÙÂʲ»Æ¥ÅäÔì³ÉµÄÎÊÌ⡹¡¹ £¬ÓÐÁË»º³åºó£¬NginxÊðÀí¿ÉÔÝ´æºó¶ËµÄÏìÓ¦£¬È»ºó°´Ð蹩ӦÊý¾Ý¸ø¿Í»§¶Ë¡£ÏÈÀ´¿´¿´Ò»Ð©¹ØÓÚ»º³åÇøµÄÉèÖÃÏ

proxy_buffering£ºÊÇ·ñÆôÓûº³å»úÖÆ£¬Ä¬ÒÔΪon¹Ø±Õ״̬¡£

client_body_buffer_size£ºÉèÖûº³å¿Í»§¶ËÇëÇóÊý¾ÝµÄÄÚ´æ¾Þϸ¡£

proxy_buffers£ºÎªÃ¿¸öÇëÇó/ÅþÁ¬ÉèÖûº³åÇøµÄÊýÄ¿ºÍ¾Þϸ£¬Ä¬ÈÏ4 4k/8k¡£

proxy_buffer_size£ºÉèÖÃÓÃÓÚ´æ´¢ÏìӦͷµÄ»º³åÇø¾Þϸ¡£

proxy_busy_buffers_size£ºÔÚºó¶ËÊý¾ÝûÓÐÍêÈ«ÎüÊÕÍê³Éʱ£¬Nginx¿ÉÒÔ½«busy״̬µÄ»º³å·µ»Ø¸ø¿Í»§¶Ë£¬¸Ã²ÎÊýÓÃÀ´ÉèÖÃbusy״̬µÄbufferÏêϸÓжà´ó£¬Ä¬ÒÔΪproxy_buffer_size*2¡£

proxy_temp_path£ºµ±Äڴ滺³åÇø´æÂúʱ£¬¿ÉÒÔ½«Êý¾ÝÔÝʱ´æ·Åµ½´ÅÅÌ£¬¸Ã²ÎÊýÊÇÉèÖô洢»º³åÊý¾ÝµÄĿ¼¡£

pathÊÇÔÝʱĿ¼µÄ·¾¶¡£

Óï·¨£ºproxy_temp_path path; pathÊÇÔÝʱĿ¼µÄ·¾¶

proxy_temp_file_write_size£ºÉèÖÃÿ´ÎдÊý¾Ý»ÝÔÝʱÎļþµÄ¾ÞϸÏÞÖÆ¡£

proxy_max_temp_file_size£ºÉèÖÃÔÝʱµÄ»º³åĿ¼ÖÐÔÊÐí´æ´¢µÄ×î´óÈÝÁ¿¡£

·Ç»º³å²ÎÊýÏ

proxy_connect_timeout£ºÉèÖÃÓëºó¶ËЧÀÍÆ÷½¨ÉèÅþÁ¬Ê±µÄ³¬Ê±Ê±¼ä¡£

proxy_read_timeout£ºÉèÖôӺó¶ËЧÀÍÆ÷¶ÁÈ¡ÏìÓ¦Êý¾ÝµÄ³¬Ê±Ê±¼ä¡£

proxy_send_timeout£ºÉèÖÃÏòºó¶ËЧÀÍÆ÷´«ÊäÇëÇóÊý¾ÝµÄ³¬Ê±Ê±¼ä¡£

ÏêϸµÄnginx.confÉèÖÃÈçÏ£º

http{  
    proxy_connect_timeout 10;  
    proxy_read_timeout 120;  
    proxy_send_timeout 10;  
    proxy_buffering on;  
    client_body_buffer_size 512k;  
    proxy_buffers 4 64k;  
    proxy_buffer_size 16k;  
    proxy_busy_buffers_size 128k;  
    proxy_temp_file_write_size 128k;  
    proxy_temp_path /soft/nginx/temp_buffer;  
}

µÇ¼ºó¸´ÖÆ

ÉÏÊöµÄ»º³åÇø²ÎÊý£¬ÊÇ»ùÓÚÿ¸öÇëÇó·ÖÅɵĿռ䣬¶ø²¢²»ÊÇËùÓÐÇëÇóµÄ¹²Ïí¿Õ¼ä¡£ËäÈ»£¬ÏêϸµÄ²ÎÊýÖµ»¹ÐèҪƾ֤Ӫҵȥ¾öÒ飬Ҫ×ÛºÏ˼Á¿»úеµÄÄÚ´æÒÔ¼°Ã¿¸öÇëÇóµÄƽ¾ùÊý¾Ý¾Þϸ¡£

×îºóÌáÒ»×죺ʹÓûº³åÒ²¿ÉÒÔïÔÌ­¼´Ê±´«Êä´øÀ´µÄ´ø¿íÏûºÄ¡£

Æß¡¢Nginx»º´æ»úÖÆ

¹ØÓÚÐÔÄÜÓÅ»¯¶øÑÔ£¬»º´æÊÇÒ»ÖÖÄܹ»´ó·ù¶ÈÌáÉýÐÔÄܵļƻ®£¬Òò´ËÏÕЩ¿ÉÒÔÔÚ¸÷´¦¶¼ÄÜÍû¼û»º´æ£¬Èç¿Í»§¶Ë»º´æ¡¢ÊðÀí»º´æ¡¢Ð§ÀÍÆ÷»º´æµÈµÈ£¬NginxµÄ»º´æÔòÊôÓÚÊðÀí»º´æµÄÒ»ÖÖ¡£¹ØÓÚÕû¸öϵͳ¶øÑÔ£¬¼ÓÈ뻺´æ´øÀ´µÄÓÅÊÆÌØÊâÏÔ×Å£º

ïÔÌ­ÁËÔÙ´ÎÏòºó¶Ë»òÎļþЧÀÍÆ÷ÇëÇó×ÊÔ´µÄ´ø¿íÏûºÄ¡£

½µµÍÁËÏÂÓÎЧÀÍÆ÷µÄ»á¼ûѹÁ¦£¬ÌáÉýϵͳÕûÌåÍÌÍ¡£

Ëõ¶ÌÁËÏìӦʱ¼ä£¬ÌáÉýÁ˼ÓÔØËÙÂÊ£¬·­¿ªÒ³ÃæµÄËÙÂʸü¿ì¡£

ÄÇôÔÚNginxÖУ¬ÓÖ¸ÃÔõÑùÉèÖÃÊðÀí»º´æÄØ£¿ÏÈÀ´¿´¿´»º´æÏà¹ØµÄÉèÖÃÏ

¡¸proxy_cache_path¡¹£ºÊðÀí»º´æµÄ·¾¶¡£

Óï·¨£º

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

µÇ¼ºó¸´ÖÆ

ÊǵÄ£¬ÄãûÓп´´í£¬¾ÍÊÇÕâô³¤….£¬Ú¹ÊÍÒ»ÏÂÿ¸ö²ÎÊýÏîµÄ¼ÄÒ壺

path£º»º´æµÄ·¾¶µØµã¡£

levels£º»º´æ´æ´¢µÄÌõÀí½á¹¹£¬×î¶àÔÊÐíÈý²ãĿ¼¡£

use_temp_path£ºÊÇ·ñʹÓÃÔÝʱĿ¼¡£

keys_zone£ºÖ¸¶¨Ò»¸ö¹²ÏíÄÚ´æ¿Õ¼äÀ´´æ´¢ÈÈÃÅKey(1M¿É´æ´¢8000¸öKey)¡£

inactive£ºÉèÖûº´æ¶à³¤Ê±¼äδ±»»á¼ûºóɾ³ý£¨Ä¬ÈÏÊÇÊ®·ÖÖÓ£©¡£

max_size£ºÔÊÐí»º´æµÄ×î´ó´æ´¢¿Õ¼ä£¬Áè¼Ýºó»á»ùÓÚLRUËã·¨ÒƳý»º´æ£¬Nginx»á½¨ÉèÒ»¸öCache managerµÄÀú³ÌÒƳýÊý¾Ý£¬Ò²¿ÉÒÔͨ¹ýpurge·½·¨¡£

manager_files£ºmanagerÀú³Ìÿ´ÎÒƳý»º´æÎļþÊýÄ¿µÄÉÏÏÞ¡£

manager_sleep£ºmanagerÀú³Ìÿ´ÎÒƳý»º´æÎļþµÄʱ¼äÉÏÏÞ¡£

manager_threshold£ºmanagerÀú³Ìÿ´ÎÒƳý»º´æºóµÄ¾àÀëʱ¼ä¡£

loader_files£ºÖØÆôNginxÔØÈ뻺´æʱ£¬Ã¿´Î¼ÓÔصĸöÊý£¬Ä¬ÈÏ100¡£

loader_sleep£ÔÃÄ¿ÎÔØÈëʱ£¬ÔÊÐíµÄ×î´óʱ¼äÉÏÏÞ£¬Ä¬ÈÏ200ms¡£

loader_threshold£ºÒ»´ÎÔØÈëºó£¬Í£ÁôµÄʱ¼ä¾àÀ룬ĬÈÏ50ms¡£

purger£ºÊÇ·ñ¿ªÆôpurge·½·¨ÒƳýÊý¾Ý¡£

purger_files£ÔÃÄ¿ÎÒƳý»º´æÎļþʱµÄÊýÄ¿¡£

purger_sleep£ÔÃÄ¿ÎÒƳýʱ£¬ÔÊÐíÏûºÄµÄ×î´óʱ¼ä¡£

purger_threshold£ÔÃÄ¿ÎÒƳýÍê³Éºó£¬Í£ÁôµÄ¾àÀëʱ¼ä¡£

¡¸proxy_cache¡¹£º¿ªÆô»ò¹Ø±ÕÊðÀí»º´æ£¬¿ªÆôʱÐèÒªÖ¸¶¨Ò»¸ö¹²ÏíÄÚ´æÇøÓò¡£

Óï·¨£º

proxy_cache zone | off;

µÇ¼ºó¸´ÖÆ

zoneΪÄÚ´æÇøÓòµÄÃû³Æ£¬¼´ÉÏÃæÖÐkeys_zoneÉèÖõÄÃû³Æ¡£

¡¸proxy_cache_key¡¹£º½ç˵ÔõÑùÌìÉú»º´æµÄ¼ü¡£

Óï·¨£º

proxy_cache_key string;

µÇ¼ºó¸´ÖÆ

stringΪÌìÉúKeyµÄ¹æÔò£¬Èç$scheme$proxy_host$request_uri¡£

¡¸proxy_cache_valid¡¹£º»º´æÉúЧµÄ״̬ÂëÓëÓâÆÚʱ¼ä¡£

Óï·¨£º

proxy_cache_valid [code ...] time;

µÇ¼ºó¸´ÖÆ

codeΪ״̬Â룬timeΪÓÐÓÃʱ¼ä£¬¿ÉÒÔƾ֤״̬ÂëÉèÖòî±ðµÄ»º´æʱ¼ä¡£

ÀýÈ磺proxy_cache_valid 200 302 30m;

¡¸proxy_cache_min_uses¡¹£ºÉèÖÃ×ÊÔ´±»ÇëÇ󼸶à´Îºó±»»º´æ¡£

Óï·¨£º

proxy_cache_min_uses number;

µÇ¼ºó¸´ÖÆ

numberΪ´ÎÊý£¬Ä¬ÒÔΪ1¡£

¡¸proxy_cache_use_stale¡¹£ºµ±ºó¶Ë·ºÆðÒ쳣ʱ£¬ÊÇ·ñÔÊÐíNginx·µ»Ø»º´æ×÷ΪÏìÓ¦¡£

Óï·¨£º

proxy_cache_use_stale error;

µÇ¼ºó¸´ÖÆ

errorΪ¹ýʧÀàÐÍ£¬¿ÉÉèÖÃtimeout|invalid_header|updating|http_500…¡£

¡¸proxy_cache_lock¡¹£º¹ØÓÚÏàͬµÄÇëÇó£¬ÊÇ·ñ¿ªÆôËø»úÖÆ£¬Ö»ÔÊÐíÒ»¸öÇëÇó·¢Íùºó¶Ë¡£

Óï·¨£º

proxy_cache_lock on | off;

µÇ¼ºó¸´ÖÆ

¡¸proxy_cache_lock_timeout¡¹£ºÉèÖÃËø³¬Ê±»úÖÆ£¬Áè¼Ý»®×¼Ê±¼äºó»áÊÍ·ÅÇëÇó¡£

proxy_cache_lock_timeout time;

µÇ¼ºó¸´ÖÆ

¡¸proxy_cache_methods¡¹£ºÉèÖùØÓÚÄÇЩHTTPÒªÁ쿪Æô»º´æ¡£

Óï·¨£º

proxy_cache_methods method;

µÇ¼ºó¸´ÖÆ

methodΪÇëÇóÒªÁìÀàÐÍ£¬ÈçGET¡¢HEADµÈ¡£

¡¸proxy_no_cache¡¹£º½ç˵²»´æ´¢»º´æµÄÌõ¼þ£¬ÇÐÊÊʱ²»»áÉúÑÄ¡£

Óï·¨£º

proxy_no_cache string...;

µÇ¼ºó¸´ÖÆ

stringΪÌõ¼þ£¬ÀýÈç$cookie_nocache $arg_nocache $arg_comment;

¡¸proxy_cache_bypass¡¹£º½ç˵²»¶ÁÈ¡»º´æµÄÌõ¼þ£¬ÇÐÊÊʱ²»»á´Ó»º´æÖжÁÈ¡¡£

Óï·¨£º

proxy_cache_bypass string...;

µÇ¼ºó¸´ÖÆ

ºÍÉÏÃæproxy_no_cacheµÄÉèÖÃÒªÁìÀàËÆ¡£

¡¸add_header¡¹£ºÍùÏìӦͷÖÐÌí¼Ó×Ö¶ÎÐÅÏ¢¡£

Óï·¨£º

add_header fieldName fieldValue;

µÇ¼ºó¸´ÖÆ

¡¸$upstream_cache_status¡¹£º¼Í¼ÁË»º´æÊÇ·ñÖÀÖеÄÐÅÏ¢£¬±£´æ¶àÖÖÇéÐΣº

MISS£ºÇëÇóδÖÀÖлº´æ¡£

HIT£ºÇëÇóÖÀÖлº´æ¡£

EXPIRED£ºÇëÇóÖÀÖлº´æµ«»º´æÒÑÓâÆÚ¡£

STALE£ºÇëÇóÖÀÖÐÁ˳¸¯»º´æ¡£

REVALIDDATED£ºNginxÑéÖ¤³Â¸¯»º´æÒÀÈ»ÓÐÓá£

UPDATING£ºÖÀÖеĻº´æÄÚÈݳ¸¯£¬µ«ÕýÔÚ¸üлº´æ¡£

BYPASS£ºÏìӦЧ¹ûÊÇ´ÓԭʼЧÀÍÆ÷»ñÈ¡µÄ¡£

PS£ºÕâ¸öºÍ֮ǰµÄ²î±ð£¬Ö®Ç°µÄ¶¼ÊDzÎÊýÏÕâ¸öÊÇÒ»¸öNginxÄÚÖñäÁ¿¡£

OK~£¬¹ØÓÚNginxÖеĻº´æÉèÖÃÏî»òÐíÏàʶºó£¬½Ó×ÅÀ´ÉèÖÃÒ»ÏÂNginxÊðÀí»º´æ£º

http{  
    # ÉèÖûº´æµÄĿ¼£¬²¢ÇÒÄÚ´æÖлº´æÇøÃûΪhot_cache£¬¾ÞϸΪ128m£¬  
    # ÈýÌìδ±»»á¼û¹ýµÄ»º´æ×Ô¶¯ÇåÎú£¬´ÅÅÌÖлº´æµÄ×î´óÈÝÁ¿Îª2GB¡£  
    proxy_cache_path /soft/nginx/cache levels=1:2 keys_zone=hot_cache:128m inactive=3d max_size=2g;  
      
    server{  
        location / {  
            # ʹÓÃÃûΪnginx_cacheµÄ»º´æ¿Õ¼ä  
            proxy_cache hot_cache;  
            # ¹ØÓÚ200¡¢206¡¢304¡¢301¡¢302״̬ÂëµÄÊý¾Ý»º´æ1Ìì  
            proxy_cache_valid 200 206 304 301 302 1d;  
            # ¹ØÓÚÆäËû״̬µÄÊý¾Ý»º´æ30·ÖÖÓ  
            proxy_cache_valid any 30m;  
            # ½ç˵ÌìÉú»º´æ¼üµÄ¹æÔò£¨ÇëÇóµÄurl+²ÎÊý×÷Ϊkey£©  
            proxy_cache_key $host$uri$is_args$args;  
            # ×ÊÔ´ÖÁÉÙ±»Öظ´»á¼ûÈý´ÎºóÔÙ¼ÓÈ뻺´æ  
            proxy_cache_min_uses 3;  
            # ·ºÆðÖظ´ÇëÇóʱ£¬Ö»ÈÃÒ»¸öÈ¥ºó¶Ë¶ÁÊý¾Ý£¬ÆäËûµÄ´Ó»º´æÖжÁÈ¡  
            proxy_cache_lock on;  
            # ÉÏÃæµÄËø³¬Ê±Ê±¼äΪ3s£¬Áè¼Ý3sδ»ñÈ¡Êý¾Ý£¬ÆäËûÇëÇóÖ±½ÓÈ¥ºó¶Ë  
            proxy_cache_lock_timeout 3s;  
            # ¹ØÓÚÇëÇó²ÎÊý»òcookieÖÐÉùÃ÷Îú²»»º´æµÄÊý¾Ý£¬²»ÔÙ¼ÓÈ뻺´æ  
            proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;  
            # ÔÚÏìӦͷÖÐÌí¼ÓÒ»¸ö»º´æÊÇ·ñÖÀÖеÄ״̬£¨±ãÓÚµ÷ÊÔ£©  
            add_header Cache-status $upstream_cache_status;  
        }  
    }  
}

µÇ¼ºó¸´ÖÆ

½Ó×ÅÀ´¿´Ò»ÏÂЧ¹û£¬ÈçÏ£º

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"

µÚÒ»´Î»á¼ûʱ£¬ÓÉÓÚ»¹Ã»ÓÐÇëÇó¹ý×ÊÔ´£¬ÒÔÊÇ»º´æÖÐûÓÐÊý¾Ý£¬Òò´ËûÓÐÖÀÖлº´æ¡£µÚ¶þ¡¢Èý´Î£¬ÒÀ¾ÉûÓÐÖÀÖлº´æ£¬Ö±ÖÁµÚËÄ´Îʱ²ÅÏÔʾÖÀÖУ¬ÕâÊÇΪʲôÄØ£¿ÓÉÓÚÔÚÇ°ÃæµÄ»º´æÉèÖÃÖУ¬ÎÒÃÇÉèÖÃÁ˼ÓÈ뻺´æµÄ×îµÍÌõ¼þΪ£º¡¸¡¸×ÊÔ´ÖÁÉÙÒª±»ÇëÇóÈý´ÎÒÔÉϲŻá¼ÓÈ뻺´æ¡£¡¹¡¹ ÕâÑù¿ÉÒÔ×èÖ¹Ðí¶àÎÞЧ»º´æÕ¼Óÿռä¡£

»º´æÕûÀí

µ±»º´æ¹ý¶àʱ£¬ÈôÊDz»ÊµÊ±ÇåÆÊÎöµ¼Ö´ÅÅ̿ռ䱻¡°³Ô¹â¡±£¬Òò´ËÎÒÃÇÐèÒªÒ»Ì×ÍêÉƵĻº´æÕûÀí»úÖÆȥɾ³ý»º´æ£¬ÔÚ֮ǰµÄproxy_cache_path²ÎÊýÖÐÓÐpurgerÏà¹ØµÄÑ¡Ï¿ªÆôºó¿ÉÒÔ°ïÎÒÃÇ×Ô¶¯ÕûÀí»º´æ£¬µ«Òź¶µÄÊÇ£º**purgerϵÁвÎÊýÖ»ÓÐÉÌÒµ°æµÄNginxPlus²Å»ªÊ¹Óã¬Òò´ËÐèÒª¸¶·Ñ²Å¿ÉʹÓá£**

²»¹ýÌìÎÞ¾øÈË֮·£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÇ¿Ê¢µÄµÚÈý·½Ä£¿éngx_cache_purgeÀ´Ìæ»»£¬ÏÈÀ´×°ÖÃһϸòå¼þ£º¢ÙÊ×ÏÈÈ¥µ½NginxµÄ×°ÖÃĿ¼Ï£¬½¨ÉèÒ»¸öcache_purgeĿ¼£º

[root@localhost]# mkdir cache_purge && cd cache_purge

µÇ¼ºó¸´ÖÆ

¢Úͨ¹ýwgetÖ¸Áî´ÓgithubÉÏÀ­È¡×°ÖðüµÄѹËõÎļþ²¢½âѹ£º

[root@localhost]# wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz  
[root@localhost]# tar -xvzf 2.3.tar.gz

µÇ¼ºó¸´ÖÆ

¢ÛÔÙ´ÎÈ¥µ½Ö®Ç°NginxµÄ½âѹĿ¼Ï£º

[root@localhost]# cd /soft/nginx/nginx1.21.6

µÇ¼ºó¸´ÖÆ

¢ÜÖØй¹½¨Ò»´ÎNginx£¬Í¨¹ý–add-moduleµÄÖ¸ÁîÌí¼Ó¸Õ¸ÕµÄµÚÈý·½Ä£¿é£º

[root@localhost]# ./configure --prefix=/soft/nginx/ --add-module=/soft/nginx/cache_purge/ngx_cache_purge-2.3/

µÇ¼ºó¸´ÖÆ

¢ÝÖØÐÂƾ֤¸Õ¸Õ¹¹½¨µÄNginx£¬ÔٴαàÒëһϣ¬¡¸µ«ÇмDz»Òªmake install¡¹ £º

[root@localhost]# make

µÇ¼ºó¸´ÖÆ

¢Þɾ³ý֮ǰNginxµÄÆô¶¯Îļþ£¬²»¶¨ÐĵÄÒ²¿ÉÒÔÒƶ¯µ½ÆäËûλÖãº

[root@localhost]# rm -rf /soft/nginx/sbin/nginx

µÇ¼ºó¸´ÖÆ

¢ß´ÓÌìÉúµÄobjsĿ¼ÖУ¬ÖØи´ÖÆÒ»¸öNginxµÄÆô¶¯Îļþµ½Ô­À´µÄλÖãº

[root@localhost]# cp objs/nginx /soft/nginx/sbin/nginx

µÇ¼ºó¸´ÖÆ

ÖÁ´Ë£¬µÚÈý·½»º´æɨ³ýÄ£¿éngx_cache_purge¾Í×°ÖÃÍê³ÉÁË£¬½ÓÏÂÀ´ÉÔ΢ÐÞ¸ÄÒ»ÏÂnginx.confÉèÖã¬ÔÙÌí¼ÓÒ»Ìõlocation¹æÔò£º

location ~ /purge(/.*) {  
  # ÉèÖÿÉÒÔÖ´ÐÐɨ³ý²Ù×÷µÄIP£¨ÏßÉÏ¿ÉÒÔÉèÖóÉÄÚÍø»úе£©  
  # allow 127.0.0.1; # ´ú±í±¾»ú  
  allow all; # ´ú±íÔÊÐíí§ÒâIPɨ³ý»º´æ  
  proxy_cache_purge $host$1$is_args$args;  
}

µÇ¼ºó¸´ÖÆ

È»ºóÔÙÖØÆôNginx£¬½ÓÏÂÀ´¼´¿Éͨ¹ýhttp://xxx/purge/xxµÄ·½·¨É¨³ý»º´æ¡£

°Ë¡¢NginxʵÏÖIPÊÇ·ÇÃûµ¥

ÓÐʱ¼äÍùÍùÓÐЩÐèÇ󣬿ÉÄÜijЩ½Ó¿ÚÖ»ÄÜ¿ª·Å¸ø¶ÔÓ¦µÄÏàÖúÉÌ£¬»òÕß¹ºÖÃ/½ÓÈëAPIµÄÏàÖúͬ°é£¬ÄÇô´Ëʱ¾ÍÐèҪʵÏÖÀàËÆÓÚIP°×Ãûµ¥µÄ¹¦Ð§¡£¶øÓÐʱ¼äÓÐЩ¶ñÒâ¹¥»÷Õß»òÅÀ³æ³ÌÐò£¬±»Ê¶±ðºóÐèҪեȡÆäÔٴλá¼ûÍøÕ¾£¬Òò´ËÒ²ÐèҪʵÏÖIPºÚÃûµ¥¡£ÄÇôÕâЩ¹¦Ð§ÎÞÐè½»Óɺó¶ËʵÏÖ£¬¿ÉÖ±½ÓÔÚNginxÖд¦Àí¡£

Nginx×öÊÇ·ÇÃûµ¥»úÖÆ£¬Ö÷ÒªÊÇͨ¹ýallow¡¢denyÉèÖÃÏîÀ´ÊµÏÖ£º

allow xxx.xxx.xxx.xxx; # ÔÊÐíÖ¸¶¨µÄIP»á¼û£¬¿ÉÒÔÓÃÓÚʵÏÖ°×Ãûµ¥¡£  
deny xxx.xxx.xxx.xxx; # եȡָ¶¨µÄIP»á¼û£¬¿ÉÒÔÓÃÓÚʵÏÖºÚÃûµ¥¡£

µÇ¼ºó¸´ÖÆ

ҪͬʱÆÁÕÏ/¿ª·Å¶à¸öIP»á¼ûʱ£¬ÈôÊÇËùÓÐIPËùÓÐдÔÚnginx.confÎļþÖж¨È»ÊDz»ÏÔʾµÄ£¬ÕâÖÖ·½·¨½ÏÁ¿ÈßÓ࣬ÄÇô¿ÉÒÔн¨Á½¸öÎļþBlocksIP.conf¡¢WhiteIP.conf£º

# --------ºÚÃûµ¥£ºBlocksIP.conf---------  
deny 192.177.12.222; # ÆÁÕÏ192.177.12.222»á¼û  
deny 192.177.44.201; # ÆÁÕÏ192.177.44.201»á¼û  
deny 127.0.0.0/8; # ÆÁÕÏ127.0.0.1µ½127.255.255.254Íø¶ÎÖеÄËùÓÐIP»á¼û  
  
# --------°×Ãûµ¥£ºWhiteIP.conf---------  
allow 192.177.12.222; # ÔÊÐí192.177.12.222»á¼û  
allow 192.177.44.201; # ÔÊÐí192.177.44.201»á¼û  
allow 127.45.0.0/16; # ÔÊÐí127.45.0.1µ½127.45.255.254Íø¶ÎÖеÄËùÓÐIP»á¼û  
deny all; # ³ý¿ªÉÏÊöIPÍ⣬ÆäËûIPËùÓÐեȡ»á¼û

µÇ¼ºó¸´ÖÆ

»®·Ö½«ÒªÕ¥È¡/¿ª·ÅµÄIPÌí¼Óµ½¶ÔÓ¦µÄÎļþºó£¬¿ÉÒÔÔÙ½«ÕâÁ½¸öÎļþÔÚnginx.confÖе¼È룺

http{  
    # ÆÁÕϸÃÎļþÖеÄËùÓÐIP  
    include /soft/nginx/IP/BlocksIP.conf;   
 server{  
    location xxx {  
        # ijһϵÁнӿÚÖ»¿ª·Å¸ø°×Ãûµ¥ÖеÄIP  
        include /soft/nginx/IP/blockip.conf;   
    }  
 }  
}

µÇ¼ºó¸´ÖÆ

¹ØÓÚÎļþÏêϸÔÚÄĶùµ¼È룬Õâ¸öÒ²²¢·ÇËæÒâµÄ£¬ÈôÊÇÒªÕûÕ¾ÆÁÕÏ/¿ª·Å¾ÍÔÚhttpÖе¼È룬ÈôÊÇÖ»ÐèÒªÒ»¸öÓòÃûÏÂÆÁÕÏ/¿ª·Å¾ÍÔÚseverÖе¼È룬ÈôÊÇÖ»ÐèÒªÕë¹ØÓÚijһϵÁнӿÚÆÁÕÏ/¿ª·ÅIP£¬ÄÇô¾ÍÔÚlocationÖе¼Èë¡£

ËäÈ»£¬ÉÏÊöÖ»ÊÇ×î¼òÆÓµÄIPºÚ/°×Ãûµ¥ÊµÏÖ·½·¨£¬Í¬Ê±Ò²¿ÉÒÔͨ¹ýngx_http_geo_module¡¢ngx_http_geo_moduleµÚÈý·½¿âȥʵÏÖ£¨ÕâÖÖ·½·¨¿ÉÒÔ°´µØÇø¡¢¹ú¼Ò¾ÙÐÐÆÁÕÏ£¬²¢ÇÒÌṩÁËIP¿â£©¡£

¾Å¡¢Nginx¿çÓòÉèÖÃ

¿çÓòÎÊÌâÔÚ֮ǰµÄµ¥Ìå¼Ü¹¹¿ª·¢ÖУ¬×ÅʵÊǽÏÁ¿ÉÙ¼ûµÄÎÊÌ⣬³ý·ÇÊÇÐèÒª½ÓÈëµÚÈý·½SDKʱ£¬²ÅÐèÒª´¦Àí´ËÎÊÌâ¡£µ«Ëæ×ÅÏÖÔÚÇ°ºó¶ËÊèÉ¢¡¢ÂþÑÜʽ¼Ü¹¹µÄÊ¢ÐУ¬¿çÓòÎÊÌâÒ²³ÉΪÁËÿ¸öJava¿ª·¢±ØÐèÒªÃ÷È·½â¾öµÄÒ»¸öÎÊÌâ¡£

¿çÓòÎÊÌⱬ·¢µÄÔµ¹ÊÔ­ÓÉ

±¬·¢¿çÓòÎÊÌâµÄÖ÷ÒªÔµ¹ÊÔ­ÓɾÍÔÚÓÚ ¡¸Í¬Ô´Õ½ÂÔ¡¹ £¬ÎªÁË°ü¹ÜÓû§ÐÅÏ¢Çå¾²£¬±ÜÃâ¶ñÒâÍøÕ¾ÇÔÈ¡Êý¾Ý£¬Í¬Ô´Õ½ÂÔÊDZØÐèµÄ£¬²»È»cookie¿ÉÒÔ¹²Ïí¡£ÓÉÓÚhttpÎÞ״̬ЭÒéͨ³£»á½èÖúcookieÀ´ÊµÏÖÓÐ״̬µÄÐÅÏ¢¼Í¼£¬ÀýÈçÓû§µÄÉí·Ý/ÃÜÂëµÈ£¬Òò´ËÒ»µ©cookie±»¹²Ïí£¬ÄÇô»áµ¼ÖÂÓû§µÄÉí·ÝÐÅÏ¢±»ÍµÈ¡¡£

ͬԴսÂÔÖ÷ÒªÊÇÖ¸ÈýµãÏàͬ£¬¡¸¡¸Ð­Òé+ÓòÃû+¶Ë¿Ú¡¹¡¹ ÏàͬµÄÁ½¸öÇëÇó£¬Ôò¿ÉÒÔ±»¿´×öÊÇͬԴµÄ£¬µ«ÈôÊÇÆäÖÐí§ÒâÒ»µã±£´æ²î±ð£¬Ôò´ú±íÊÇÁ½¸ö²î±ðÔ´µÄÇëÇó£¬Í¬Ô´Õ½ÂÔ»áÏÞÖÆÁ˲î±ðÔ´Ö®¼äµÄ×ÊÔ´½»»¥¡£

Nginx½â¾ö¿çÓòÎÊÌâ

ŪÃ÷È·ÁË¿çÓòÎÊÌâµÄ±¬·¢Ôµ¹ÊÔ­ÓÉ£¬½ÓÏÂÀ´¿´¿´NginxÖÐÓÖ¸ÃÔõÑù½â¾ö¿çÓòÄØ£¿×Åʵ½ÏÁ¿¼òÆÓ£¬ÔÚnginx.confÖÐÉÔ΢Ìí¼ÓÒ»µãÉèÖü´¿É£º

location / {  
    # ÔÊÐí¿çÓòµÄÇëÇ󣬿ÉÒÔ×Ô½ç˵±äÁ¿$http_origin£¬*ÌåÏÖËùÓÐ  
    add_header 'Access-Control-Allow-Origin' *;  
    # ÔÊÐíЯ´øcookieÇëÇó  
    add_header 'Access-Control-Allow-Credentials' 'true';  
    # ÔÊÐí¿çÓòÇëÇóµÄÒªÁ죺GET,POST,OPTIONS,PUT  
    add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';  
    # ÔÊÐíÇëÇóʱЯ´øµÄÍ·²¿ÐÅÏ¢£¬*ÌåÏÖËùÓÐ  
    add_header 'Access-Control-Allow-Headers' *;  
    # ÔÊÐí·¢ËÍ°´¶Î»ñÈ¡×ÊÔ´µÄÇëÇó  
    add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';  
    # Ò»¶¨ÒªÓУ¡£¡£¡²»È»PostÇëÇóÎÞ·¨¾ÙÐпçÓò£¡  
    # ÔÚ·¢ËÍPost¿çÓòÇëÇóÇ°£¬»áÒÔOptions·½·¨·¢ËÍÔ¤¼ìÇëÇó£¬Ð§ÀÍÆ÷½ÓÊÜʱ²Å»áÕýʽÇëÇó  
    if ($request_method = 'OPTIONS') {  
        add_header 'Access-Control-Max-Age' 1728000;  
        add_header 'Content-Type' 'text/plain; charset=utf-8';  
        add_header 'Content-Length' 0;  
        # ¹ØÓÚOptions·½·¨µÄÇëÇó·µ»Ø204£¬ÌåÏÖ½ÓÊÜ¿çÓòÇëÇó  
        return 204;  
    }  
}

µÇ¼ºó¸´ÖÆ

ÔÚnginx.confÎļþ¼ÓÉÏÈçÉÏÉèÖú󣬿çÓòÇëÇó¼´¿ÉÉúЧÁË¡£

µ«ÈôÊǺó¶ËÊǽÓÄÉÂþÑÜʽ¼Ü¹¹¿ª·¢µÄ£¬ÓÐʱ¼äRPCŲÓÃÒ²ÐèÒª½â¾ö¿çÓòÎÊÌ⣬²»È»Ò²Í¬Ñù»á·ºÆðÎÞ·¨¿çÓòÇëÇóµÄÒì³££¬Òò´Ë¿ÉÒÔÔÚÄãµÄºó¶ËÏîÄ¿ÖУ¬Í¨¹ý¼ÌÐøHandlerInterceptorAdapterÀࡢʵÏÖWebMvcConfigurer½Ó¿Ú¡¢Ìí¼Ó@CrossOrgin×¢½âµÄ·½·¨ÊµÏÖ½Ó¿ÚÖ®¼äµÄ¿çÓòÉèÖá£

Ê®¡¢Nginx·ÀµÁÁ´Éè¼Æ

Ê×ÏÈÏàʶһϺÎνµÁÁ´£º¡¸¡¸µÁÁ´¼´ÊÇÖ¸ÍⲿÍøÕ¾ÒýÈëÄ¿½ñÍøÕ¾µÄ×ÊÔ´¶ÔÍâչʾ¡¹¡¹ £¬À´¾Ù¸ö¼òÆÓµÄÀý×ÓÃ÷È·£º

ºÃ±È±ÚÖ½ÍøÕ¾XÕ¾¡¢YÕ¾£¬XÕ¾ÊÇÒ»µãµãÈ¥¹ºÖðæȨ¡¢Ç©Ô¼×÷Õߵķ½·¨£¬´Ó¶ø»ýÀÛÁ˺£Á¿µÄ±ÚÖ½ËزÄ£¬µ«YÕ¾ÓÉÓÚ×ʽðµÈ¸÷·½ÃæµÄÔµ¹ÊÔ­ÓÉ£¬¾ÍÖ±½Óͨ¹ý4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"ÕâÖÖ·½·¨ÕÕ°áÁËXÕ¾µÄËùÓбÚÖ½×ÊÔ´£¬¼Ì¶øÌṩӦÓû§ÏÂÔØ¡£

ÄÇôÈôÊÇÎÒÃÇ×Ô¼ºÊÇÕâ¸öXÕ¾µÄBoss£¬ÐÄÖÐÒ»¶¨²»Ë¬£¬ÄÇô´ËʱÓÖ¸ÃÔõÑùÆÁÕÏÕâÀàÎÊÌâÄØ£¿ÄÇô½ÓÏÂÀ´ÒªÐð˵µÄ¡¸¡¸·ÀµÁÁ´¡¹¡¹ µÇ³¡ÁË£¡

NginxµÄ·ÀµÁÁ´»úÖÆʵÏÖ£¬¸úÒ»¸öÍ·²¿×ֶΣºRefererÓйØ£¬¸Ã×Ö¶ÎÖ÷ÒªÐÎòÁËÄ¿½ñÇëÇóÊÇ´ÓÄĶù·¢³öµÄ£¬ÄÇôÔÚNginxÖоͿɻñÈ¡¸ÃÖµ£¬È»ºóÅжÏÊÇ·ñΪ±¾Õ¾µÄ×ÊÔ´ÒýÓÃÇëÇó£¬ÈôÊDz»ÊÇÔò²»ÔÊÐí»á¼û¡£NginxÖб£´æÒ»¸öÉèÖÃÏîΪvalid_referers£¬ÕýºÃ¿ÉÒÔÖª×ãÇ°ÃæµÄÐèÇó£¬Óï·¨ÈçÏ£º

valid_referers none | blocked | server_names | string ...;

µÇ¼ºó¸´ÖÆ

none£ºÌåÏÖ½ÓÊÜûÓÐReferer×ֶεÄHTTPÇëÇó»á¼û¡£

blocked£ºÌåÏÖÔÊÐíhttp://»òhttps//ÒÔÍâµÄÇëÇó»á¼û¡£

server_names£º×ÊÔ´µÄ°×Ãûµ¥£¬ÕâÀï¿ÉÒÔÖ¸¶¨ÔÊÐí»á¼ûµÄÓòÃû¡£

string£º¿É×Ô½ç˵×Ö·û´®£¬Ö§ÅäͨÅä·û¡¢ÕýÔò±í´ïʽд·¨¡£

¼òÆÓÏàʶÓï·¨ºó£¬½ÓÏÂÀ´µÄʵÏÖÈçÏ£º

# ÔÚÐÂÎÅÊèÉ¢µÄlocationÖпªÆô·ÀµÁÁ´»úÖÆ  
location ~ .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){  
    # ×îºóÃæµÄÖµÔÚÉÏÏßÇ°¿ÉÉèÖÃΪÔÊÐíµÄÓòÃûµØµã  
    valid_referers blocked 192.168.12.129;  
    if ($invalid_referer) {  
        # ¿ÉÒÔÉèÖóɷµ»ØÒ»ÕÅեȡ͵ȡµÄͼƬ  
        # rewrite   ^/ http://xx.xx.com/NO.jpg;  
        # Ò²¿ÉÖ±½Ó·µ»Ø403  
        return   403;  
    }  
      
    root   /soft/nginx/static_resources;  
    expires 7d;  
}

µÇ¼ºó¸´ÖÆ

ƾ֤ÉÏÊöÖеÄÄÚÈÝÉèÖú󣬾ÍÒѾ­Í¨¹ýNginxʵÏÖÁË×î»ù±¾µÄ·ÀµÁÁ´»úÖÆ£¬×îºóÖ»ÐèÒªÌØÊâÖØÆôһϾͺÃÀ²£¡ËäÈ»£¬¹ØÓÚ·ÀµÁÁ´»úÖÆʵÏÖÕâ¿é£¬Ò²ÓÐרÃŵĵÚÈý·½Ä£¿éngx_http_accesskey_moduleʵÏÖÁ˸üΪÍêÉƵÄÉè¼Æ£¬¸ÐÐËȤµÄСͬ°é¿ÉÒÔ×ÔÐÐÈ¥¿´¿´¡£

PS£º·ÀµÁÁ´»úÖÆÒ²ÎÞ·¨½â¾öÅÀ³æαÔìreferersÐÅÏ¢µÄÕâÖÖ·½·¨×¥È¡Êý¾Ý¡£

ʮһ¡¢Nginx´óÎļþ´«ÊäÉèÖÃ

ÔÚijЩӪҵ³¡¾°ÖÐÐèÒª´«ÊäһЩ´óÎļþ£¬µ«´óÎļþ´«ÊäʱÍùÍù¶¼»á»á·ºÆðһЩBug£¬ºÃ±ÈÎļþÁè¼ÝÏÞÖÆ¡¢Îļþ´«ÊäÀú³ÌÖÐÇëÇó³¬Ê±µÈ£¬ÄÇô´Ëʱ¾Í¿ÉÒÔÔÚNginxÉÔ΢×öһЩÉèÖã¬ÏÈÀ´ÏàʶһЩ¹ØÓÚ´óÎļþ´«Êäʱ¿ÉÄÜ»áÓõÄÉèÖÃÏ

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"

ÔÚ´«Êä´óÎļþʱ£¬client_max_body_size¡¢client_header_timeout¡¢proxy_read_timeout¡¢proxy_send_timeoutÕâËĸö²ÎÊýÖµ¶¼¿ÉÒÔƾ֤×Ô¼ºÏîÄ¿µÄÏÖÕæÏàÐÎÀ´ÉèÖá£

ÉÏÊöÉèÖýöÊÇ×÷ΪÊðÀí²ãÐèÒªÉèÖõÄ£¬ÓÉÓÚ×îÖÕ¿Í»§¶Ë´«ÊäÎļþÕÕ¾ÉÖ±½ÓÓëºó¶Ë¾ÙÐн»»¥£¬ÕâÀïÖ»ÊÇ°Ñ×÷ΪÍø¹Ø²ãµÄNginxÉèÖõ÷¸ßÒ»µã£¬µ÷µ½Äܹ»¡°ÈÝÄÉ´óÎļþ¡±´«ÊäµÄˮƽ¡£ËäÈ»£¬NginxÖÐÒ²¿ÉÒÔ×÷ΪÎļþЧÀÍÆ÷ʹÓ㬵«ÐèÒªÓõ½Ò»¸öרÃŵĵÚÈý·½Ä£¿énginx-upload-module£¬ÈôÊÇÏîÄ¿ÖÐÎļþÉÏ´«µÄ×÷Óô¦Î´¼¸£¬ÄÇô½¨Òé¿ÉÒÔͨ¹ýNginx´î½¨£¬ÊÂʵ¿ÉÒÔ½ÚԼһ̨ÎļþЧÀÍÆ÷×ÊÔ´¡£µ«ÈçÈôÎļþÉÏ´«/ÏÂÔؽÏΪƵÈÔ£¬ÄÇôÕվɽ¨ÒéÌØÊâ´î½¨ÎļþЧÀÍÆ÷£¬²¢½«ÉÏ´«/ÏÂÔع¦Ð§½»Óɺó¶Ë´¦Àí¡£

Ê®¶þ¡¢NginxÉèÖÃSLLÖ¤Êé

Ëæ×ÅÔ½À´Ô½¶àµÄÍøÕ¾½ÓÈëHTTPS£¬Òò´ËNginxÖнöÉèÖÃHTTP»¹²»·ó£¬ÍùÍù»¹ÐèÒª¼àÌý443¶Ë¿ÚµÄÇëÇó£¬HTTPSΪÁËÈ·±£Í¨Ñ¶Çå¾²£¬ÒÔÊÇЧÀͶËÐèÉèÖöÔÓ¦µÄÊý×ÖÖ¤Ê飬µ±ÏîĿʹÓÃNginx×÷ΪÍø¹Øʱ£¬ÄÇô֤ÊéÔÚNginxÖÐÒ²ÐèÒªÉèÖ㬽ÓÏÂÀ´¼òÆÓÁÄһϹØÓÚSSLÖ¤ÊéÉèÖÃÀú³Ì£º

¢ÙÏÈÈ¥CA»ú¹¹»ò´ÓÔÆ¿ØÖÆ̨ÖÐÉêÇë¶ÔÓ¦µÄSSLÖ¤Ê飬ÉóºËͨʺóÏÂÔØNginx°æ±¾µÄÖ¤Êé¡£

¢ÚÏÂÔØÊý×ÖÖ¤Êéºó£¬ÍêÕûµÄÎļþ×ܹ²ÓÐÈý¸ö£º.crt¡¢.key¡¢.pem£º

.crt£ºÊý×ÖÖ¤ÊéÎļþ£¬.crtÊÇ.pemµÄÍØÕ¹Îļþ£¬Òò´ËÓÐЩÈËÏÂÔغó¿ÉÄÜûÓС£

.key£ºÐ§ÀÍÆ÷µÄ˽ԿÎļþ£¬¼°·Ç¶Ô³Æ¼ÓÃܵÄ˽Կ£¬ÓÃÓÚ½âÃܹ«Ô¿´«ÊäµÄÊý¾Ý¡£

.pem£ºBase64-encoded±àÂëÃûÌõÄÔ´Ö¤ÊéÎı¾Îļþ£¬¿É×ÔÐиùÐèÇóÐÞ¸ÄÍØÕ¹Ãû¡£

¢ÛÔÚNginxĿ¼ÏÂн¨certificateĿ¼£¬²¢½«ÏÂÔغõÄÖ¤Êé/˽ԿµÈÎļþÉÏ´«ÖÁ¸ÃĿ¼¡£

¢Ü×îºóÐÞ¸ÄÒ»ÏÂnginx.confÎļþ¼´¿É£¬ÈçÏ£º

# ----------HTTPSÉèÖÃ-----------  
server {  
    # ¼àÌýHTTPSĬÈϵÄ443¶Ë¿Ú  
    listen 443;  
    # ÉèÖÃ×Ô¼ºÏîÄ¿µÄÓòÃû  
    server_name www.xxx.com;  
    # ·­¿ªSSL¼ÓÃÜ´«Êä  
    ssl on;  
    # ÊäÈëÓòÃûºó£¬Ê×Ò³ÎļþËùÔÚµÄĿ¼  
    root html;  
    # ÉèÖÃÊ×Ò³µÄÎļþÃû  
    index index.html index.htm index.jsp index.ftl;  
    # ÉèÖÃ×Ô¼ºÏÂÔصÄÊý×ÖÖ¤Êé  
    ssl_certificate  certificate/xxx.pem;  
    # ÉèÖÃ×Ô¼ºÏÂÔصÄЧÀÍÆ÷˽Կ  
    ssl_certificate_key certificate/xxx.key;  
    # ×èֹͨѶʱ£¬¼ÓÃܻỰµÄÓÐÓÃÆÚ£¬ÔÚ¸Ãʱ¼ä¶ÎÄÚ²»ÐèÒªÖØн»Á÷ÃÜÔ¿  
    ssl_session_timeout 5m;  
    # TLSÎÕÊÖʱ£¬Ð§ÀÍÆ÷½ÓÄɵÄÃÜÂëÌ×¼þ  
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  
    # ЧÀÍÆ÷Ö§³ÖµÄTLS°æ±¾  
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  
    # ¿ªÆôÓÉЧÀÍÆ÷¾öÒé½ÓÄɵÄÃÜÂëÌ×¼þ  
    ssl_prefer_server_ciphers on;  
  
    location / {  
        ....  
    }  
}  
  
# ---------HTTPÇëÇóתHTTPS-------------  
server {  
    # ¼àÌýHTTPĬÈϵÄ80¶Ë¿Ú  
    listen 80;  
    # ÈôÊÇ80¶Ë¿Ú·ºÆð»á¼û¸ÃÓòÃûµÄÇëÇó  
    server_name www.xxx.com;  
    # ½«ÇëÇó¸ÄдΪHTTPS£¨ÕâÀïдÄãÉèÖÃÁËHTTPSµÄÓòÃû£©  
    rewrite ^(.*)$ https://www.xxx.com;  
}

µÇ¼ºó¸´ÖÆ

OK~£¬Æ¾Ö¤ÈçÉÏÉèÖÃÁËNginxºó£¬ÄãµÄÍøÕ¾¼´¿Éͨ¹ýhttps://µÄ·½·¨»á¼û£¬²¢ÇÒµ±¿Í»§¶ËʹÓÃhttp://µÄ·½·¨»á¼ûʱ£¬»á×Ô¶¯½«Æä¸ÄдΪHTTPSÇëÇó¡£

Ê®Èý¡¢NginxµÄ¸ß¿ÉÓÃ

ÏßÉÏÈôÊǽÓÄɵ¥¸ö½ÚµãµÄ·½·¨°²ÅÅNginx£¬ÄÑÃâ»á·ºÆðÌìÔÖÈË»ö£¬ºÃ±ÈϵͳÒì³£¡¢³ÌÐòå´»ú¡¢Ð§ÀÍÆ÷¶Ïµç¡¢»ú·¿±¬Õ¨¡¢µØÇòɱ¾ø….¹þ¹þ¹þ£¬¿äÕÅÁË¡£µ«ÏÖʵÉú²úÇéÐÎÖÐȷʵ±£´æÒþ»¼ÎÊÌ⣬ÓÉÓÚNginx×÷ΪÕû¸öϵͳµÄÍø¹Ø²ã½ÓÈëÍⲿÁ÷Á¿£¬ÒÔÊÇÒ»µ©Nginxå´»ú£¬×îÖվͻᵼÖÂÕû¸öϵͳ²»¿ÉÓã¬ÕâÎÞÒɹØÓÚÓû§µÄÌåÑé¸ÐÊǼ«²îµÄ£¬Òò´ËÒ²µÃ°ü¹ÜNginx¸ß¿ÉÓõÄÌØÕ÷¡£

½ÓÏÂÀ´Ôò»áͨ¹ýkeepalivedµÄVIP»úÖÆ£¬ÊµÏÖNginxµÄ¸ß¿ÉÓá£VIP²¢²»ÊÇÖ»»áÔ±µÄÒâ˼£¬¶øÊÇÖ¸Virtual IP£¬¼´ÐéÄâIP¡£

keepalivedÔÚ֮ǰµ¥Ìå¼Ü¹¹¿ª·¢Ê±£¬ÊÇÒ»¸öÓõĽÏΪƵÈԵĸ߿ÉÓÃÊÖÒÕ£¬ºÃ±ÈMySQL¡¢Redis¡¢MQ¡¢Proxy¡¢TomcatµÈ¸÷´¦¶¼»áͨ¹ýkeepalivedÌṩµÄVIP»úÖÆ£¬ÊµÏÖµ¥½ÚµãÓ¦Óõĸ߿ÉÓá£

Keepalived+ÖØÆô¾ç±¾+Ë«»úÈȱ¸´î½¨

¢ÙÊ×ÏȽ¨ÉèÒ»¸ö¶ÔÓ¦µÄĿ¼²¢ÏÂÔØkeepalivedµ½LinuxÖв¢½âѹ£º

[root@localhost]# mkdir /soft/keepalived && cd /soft/keepalived  
[root@localhost]# wget https://www.keepalived.org/software/keepalived-2.2.4.tar.gz  
[root@localhost]# tar -zxvf keepalived-2.2.4.tar.gz

µÇ¼ºó¸´ÖÆ

¢Ú½øÈë½âѹºóµÄkeepalivedĿ¼²¢¹¹½¨×°ÖÃÇéÐΣ¬È»ºó±àÒë²¢×°Öãº

[root@localhost]# cd keepalived-2.2.4  
[root@localhost]# ./configure --prefix=/soft/keepalived/  
[root@localhost]# make && make install

µÇ¼ºó¸´ÖÆ

¢Û½øÈë×°ÖÃĿ¼µÄ/soft/keepalived/etc/keepalived/²¢±à¼­ÉèÖÃÎļþ£º

[root@localhost]# cd /soft/keepalived/etc/keepalived/  
[root@localhost]# vi keepalived.conf

µÇ¼ºó¸´ÖÆ

¢Ü±à¼­Ö÷»úµÄkeepalived.conf½¹µãÉèÖÃÎļþ£¬ÈçÏ£º

global_defs {  
    # ×Ô´øµÄÓʼþÌáÐÑЧÀÍ£¬½¨ÒéÓÃ×ÔÁ¦µÄ¼à¿Ø»òµÚÈý·½SMTP£¬Ò²¿ÉÑ¡ÔñÉèÖÃÓʼþ·¢ËÍ¡£  
    notification_email {  
        root@localhost  
    }  
    notification_email_from root@localhost  
    smtp_server localhost  
    smtp_connect_timeout 30  
    # ¸ß¿ÉÓü¯ÈºÖ÷»úÉí·Ý±êʶ(¼¯ÈºÖÐÖ÷»úÉí·Ý±êʶÃû³Æ²»¿ÉÖظ´£¬½¨ÒéÉèÖñ¾Ç®»úIP)  
 router_id 192.168.12.129   
}  
  
# ׼ʱÔËÐеľ籾ÎļþÉèÖà  
vrrp_script check_nginx_pid_restart {  
    # ֮ǰ±àдµÄnginxÖØÆô¾ç±¾µÄËùÔÚλÖà  
 script "/soft/scripts/keepalived/check_nginx_pid_restart.sh"   
    # ÿ¾àÀë3ÃëÖ´ÐÐÒ»´Î  
 interval 3  
    # ÈôÊǾ籾ÖеÄÌõ¼þ½¨É裬ÖØÆôÒ»´ÎÔòȨÖØ-20  
 weight -20  
}  
  
# ½ç˵ÐéÄâ·ÓÉ£¬VI_1ΪÐéÄâ·Óɵıêʾ·û£¨¿É×Ô½ç˵Ãû³Æ£©  
vrrp_instance VI_1 {  
    # Ä¿½ñ½ÚµãµÄÉí·Ý±êʶ£ºÓÃÀ´¾öÒéÖ÷´Ó£¨MASTERΪÖ÷»ú£¬BACKUPΪ´Ó»ú£©  
 state MASTER  
    # °ó¶¨ÐéÄâIPµÄÍøÂç½Ó¿Ú£¬Æ¾Ö¤×Ô¼ºµÄ»úеµÄÍø¿¨ÉèÖà  
 interface ens33   
    # ÐéÄâ·ÓɵÄIDºÅ£¬Ö÷´ÓÁ½¸ö½ÚµãÉèÖñØÐèÒ»Ñù  
 virtual_router_id 121  
    # Ìîд±¾»úIP  
 mcast_src_ip 192.168.12.129  
    # ½ÚµãȨÖØÓÅÏȼ¶£¬Ö÷½ÚµãÒª±È´Ó½ÚµãÓÅÏȼ¶¸ß  
 priority 100  
    # ÓÅÏȼ¶¸ßµÄÉèÖÃnopreempt£¬½â¾öÒì³£»Ö¸´ºóÔÙ´ÎÇÀÕ¼Ôì³ÉµÄÄÔÁÑÎÊÌâ  
 nopreempt  
    # ×é²¥ÐÅÏ¢·¢Ë;àÀ룬Á½¸ö½ÚµãÉèÖñØÐèÒ»Ñù£¬Ä¬ÈÏ1s£¨ÀàËÆÓÚÐÄÌø¼ì²â£©  
 advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
    # ½«track_script¿é¼ÓÈëinstanceÉèÖÃ¿é  
    track_script {  
        # Ö´ÐÐNginx¼à¿ØµÄ¾ç±¾  
  check_nginx_pid_restart  
    }  
  
    virtual_ipaddress {  
        # ÐéÄâIP(VIP)£¬Ò²¿ÉÀ©Õ¹£¬¿ÉÉèÖöà¸ö¡£  
  192.168.12.111  
    }  
}

µÇ¼ºó¸´ÖÆ

¢Ý¿Ë¡һ̨֮ǰµÄÐéÄâ»ú×÷Ϊ´Ó£¨±¸£©»ú£¬±à¼­´Ó»úµÄkeepalived.confÎļþ£¬ÈçÏ£º

global_defs {  
    # ×Ô´øµÄÓʼþÌáÐÑЧÀÍ£¬½¨ÒéÓÃ×ÔÁ¦µÄ¼à¿Ø»òµÚÈý·½SMTP£¬Ò²¿ÉÑ¡ÔñÉèÖÃÓʼþ·¢ËÍ¡£  
    notification_email {  
        root@localhost  
    }  
    notification_email_from root@localhost  
    smtp_server localhost  
    smtp_connect_timeout 30  
    # ¸ß¿ÉÓü¯ÈºÖ÷»úÉí·Ý±êʶ(¼¯ÈºÖÐÖ÷»úÉí·Ý±êʶÃû³Æ²»¿ÉÖظ´£¬½¨ÒéÉèÖñ¾Ç®»úIP)  
 router_id 192.168.12.130   
}  
  
# ׼ʱÔËÐеľ籾ÎļþÉèÖà  
vrrp_script check_nginx_pid_restart {  
    # ֮ǰ±àдµÄnginxÖØÆô¾ç±¾µÄËùÔÚλÖà  
 script "/soft/scripts/keepalived/check_nginx_pid_restart.sh"   
    # ÿ¾àÀë3ÃëÖ´ÐÐÒ»´Î  
 interval 3  
    # ÈôÊǾ籾ÖеÄÌõ¼þ½¨É裬ÖØÆôÒ»´ÎÔòȨÖØ-20  
 weight -20  
}  
  
# ½ç˵ÐéÄâ·ÓÉ£¬VI_1ΪÐéÄâ·Óɵıêʾ·û£¨¿É×Ô½ç˵Ãû³Æ£©  
vrrp_instance VI_1 {  
    # Ä¿½ñ½ÚµãµÄÉí·Ý±êʶ£ºÓÃÀ´¾öÒéÖ÷´Ó£¨MASTERΪÖ÷»ú£¬BACKUPΪ´Ó»ú£©  
 state BACKUP  
    # °ó¶¨ÐéÄâIPµÄÍøÂç½Ó¿Ú£¬Æ¾Ö¤×Ô¼ºµÄ»úеµÄÍø¿¨ÉèÖà  
 interface ens33   
    # ÐéÄâ·ÓɵÄIDºÅ£¬Ö÷´ÓÁ½¸ö½ÚµãÉèÖñØÐèÒ»Ñù  
 virtual_router_id 121  
    # Ìîд±¾»úIP  
 mcast_src_ip 192.168.12.130  
    # ½ÚµãȨÖØÓÅÏȼ¶£¬Ö÷½ÚµãÒª±È´Ó½ÚµãÓÅÏȼ¶¸ß  
 priority 90  
    # ÓÅÏȼ¶¸ßµÄÉèÖÃnopreempt£¬½â¾öÒì³£»Ö¸´ºóÔÙ´ÎÇÀÕ¼Ôì³ÉµÄÄÔÁÑÎÊÌâ  
 nopreempt  
    # ×é²¥ÐÅÏ¢·¢Ë;àÀ룬Á½¸ö½ÚµãÉèÖñØÐèÒ»Ñù£¬Ä¬ÈÏ1s£¨ÀàËÆÓÚÐÄÌø¼ì²â£©  
 advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
    # ½«track_script¿é¼ÓÈëinstanceÉèÖÃ¿é  
    track_script {  
        # Ö´ÐÐNginx¼à¿ØµÄ¾ç±¾  
  check_nginx_pid_restart  
    }  
  
    virtual_ipaddress {  
        # ÐéÄâIP(VIP)£¬Ò²¿ÉÀ©Õ¹£¬¿ÉÉèÖöà¸ö¡£  
  192.168.12.111  
    }  
}

µÇ¼ºó¸´ÖÆ

¢Þн¨scriptsĿ¼²¢±àдNginxµÄÖØÆô¾ç±¾£¬check_nginx_pid_restart.sh£º

[root@localhost]# mkdir /soft/scripts /soft/scripts/keepalived  
[root@localhost]# touch /soft/scripts/keepalived/check_nginx_pid_restart.sh  
[root@localhost]# vi /soft/scripts/keepalived/check_nginx_pid_restart.sh  
  
#!/bin/sh  
# ͨ¹ýpsÖ¸ÁîÅÌÎʺǫ́µÄnginxÀú³ÌÊý£¬²¢½«ÆäÉúÑÄÔÚ±äÁ¿nginx_numberÖÐ  
nginx_number=`ps -C nginx --no-header | wc -l`  
# ÅжϺǫ́ÊÇ·ñÉÐÓÐNginxÀú³ÌÔÚÔËÐÐ  
if [ $nginx_number -eq 0 ];then  
    # ÈôÊǺǫ́ÅÌÎʲ»µ½`Nginx`Àú³Ì±£´æ£¬ÔòÖ´ÐÐÖØÆôÖ¸Áî  
    /soft/nginx/sbin/nginx -c /soft/nginx/conf/nginx.conf  
    # ÖØÆôºóÆÚ´ý1sºó£¬ÔÙ´ÎÅÌÎʺǫ́Àú³ÌÊý  
    sleep 1  
    # ÈôÊÇÖØÆôºóÒÀ¾ÉÎÞ·¨ÅÌÎʵ½nginxÀú³Ì  
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then  
        # ½«keepalivedÖ÷»úÏÂÏߣ¬½«ÐéÄâIPƯÒƸø´Ó»ú£¬´Ó»úÉÏÏß½ÓÊÜNginxЧÀÍ  
        systemctl stop keepalived.service  
    fi  
fi

µÇ¼ºó¸´ÖÆ

¢ß±àдµÄ¾ç±¾ÎļþÐèÒª¸ü¸Ä±àÂëÃûÌ㬲¢¸¶ÓëÖ´ÐÐȨÏÞ£¬²»È»¿ÉÄÜÖ´ÐÐʧ°Ü£º

[root@localhost]# vi /soft/scripts/keepalived/check_nginx_pid_restart.sh  
  
:set fileformat=unix # ÔÚviÏÂÁîÄÚÀïÖ´ÐУ¬Ð޸ıàÂëÃûÌà  
:set ff # Éó²éÐ޸ĺóµÄ±àÂëÃûÌà  
  
[root@localhost]# chmod +x /soft/scripts/keepalived/check_nginx_pid_restart.sh

µÇ¼ºó¸´ÖÆ

¢àÓÉÓÚ×°ÖÃkeepalivedʱ£¬ÊÇ×Ô½ç˵µÄ×°ÖÃλÖã¬Òò´ËÐèÒª¿½±´Ò»Ð©Îļþµ½ÏµÍ³Ä¿Â¼ÖУº

[root@localhost]# mkdir /etc/keepalived/  
[root@localhost]# cp /soft/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/  
[root@localhost]# cp /soft/keepalived/keepalived-2.2.4/keepalived/etc/init.d/keepalived /etc/init.d/  
[root@localhost]# cp /soft/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

µÇ¼ºó¸´ÖÆ

¢á½«keepalived¼ÓÈëϵͳЧÀͲ¢ÉèÖÿªÆô×ÔÆô¶¯£¬È»ºó²âÊÔÆô¶¯ÊÇ·ñÕý³££º

[root@localhost]# chkconfig keepalived on  
[root@localhost]# systemctl daemon-reload  
[root@localhost]# systemctl enable keepalived.service  
[root@localhost]# systemctl start keepalived.service

µÇ¼ºó¸´ÖÆ

ÆäËûÏÂÁ

systemctl disable keepalived.service # եȡ¿ª»ú×Ô¶¯Æô¶¯  
systemctl restart keepalived.service # ÖØÆôkeepalived  
systemctl stop keepalived.service # ×èÖ¹keepalived  
tail -f /var/log/messages # Éó²ékeepalivedÔËÐÐʱÈÕÖ¾

µÇ¼ºó¸´ÖÆ

¢â×îºó²âÊÔÒ»ÏÂVIPÊÇ·ñÉúЧ£¬Í¨¹ýÉó²é±¾»úÊÇ·ñÀֳɹÒÔØÐéÄâIP£º

[root@localhost]# ip addr

µÇ¼ºó¸´ÖÆ

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"ÐéÄâIP-VIP

´ÓÉÏͼÖпÉÒÔÏÔ×ÅÍû¼ûÐéÄâIPÒѾ­ÀֳɹÒÔØ£¬µ«ÁíÍâһ̨»úе192.168.12.130²¢²»»á¹ÒÔØÕâ¸öÐéÄâIP£¬Ö»Óе±Ö÷»úÏÂÏߺó£¬×÷Ϊ´Ó»úµÄ192.168.12.130²Å»áÉÏÏߣ¬½ÓÌæVIP¡£×îºó²âÊÔÒ»ÏÂÍâÍøÊÇ·ñ¿ÉÒÔÕý³£ÓëVIPͨѶ£¬¼´ÔÚWindowsÖÐÖ±½Óping VIP£º

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"Ping-VIP

Íⲿͨ¹ýVIPͨѶʱ£¬Ò²¿ÉÒÔÕý³£Pingͨ£¬´ú±íÐéÄâIPÉèÖÃÀֳɡ£

Nginx¸ß¿ÉÓÃÐÔ²âÊÔ

¾­ÓÉÉÏÊö°ì·¨ºó£¬keepalivedµÄVIP»úÖÆÒѾ­´î½¨Àֳɣ¬ÔÚÉϸö½×¶ÎÖÐÖ÷Òª×öÁ˼¸¼þÊ£º

Ò»¡¢Îª°²ÅÅNginxµÄ»úе¹ÒÔØÁËVIP¡£

¶þ¡¢Í¨¹ýkeepalived´î½¨ÁËÖ÷´ÓË«»úÈȱ¸¡£

Èý¡¢Í¨¹ýkeepalivedʵÏÖÁËNginxå´»úÖØÆô¡£

ÓÉÓÚÇ°ÃæûÓÐÓòÃûµÄÔµ¹ÊÔ­ÓÉ£¬Òò´Ë×î³õserver_nameÉèÖõÄÊÇÄ¿½ñ»úеµÄIP£¬ÒÔÊÇÐèÉÔ΢¸ü¸ÄÒ»ÏÂnginx.confµÄÉèÖãº

sever{  
    listen    80;  
    # ÕâÀï´Ó»úеµÄÍâµØIP¸ÄΪÐéÄâIP  
 server_name 192.168.12.111;  
 # ÈôÊÇÕâÀïÉèÖõÄÊÇÓòÃû£¬ÄÇôÔò½«ÓòÃûµÄÓ³ÉäÉèÖøÄΪÐéÄâIP  
}

µÇ¼ºó¸´ÖÆ

×îØʺóʵÑéÒ»ÏÂЧ¹û£º

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"

ÔÚÉÏÊöÀú³ÌÖУ¬Ê×ÏÈ»®·ÖÆô¶¯ÁËkeepalived¡¢nginxЧÀÍ£¬È»ºóͨ¹ýÊÖ¶¯×èÖ¹nginxµÄ·½·¨Ä£ÄâÁËNginxå´»úÇéÐΣ¬¹ýÁËƬÉκóÔÙ´ÎÅÌÎʺǫ́Àú³Ì£¬ÎÒÃǻᷢÃ÷nginxÒÀ¾É´æ»î¡£

´ÓÕâ¸öÀú³ÌÖв»ÄÑ·¢Ã÷£¬keepalivedÒѾ­ÎªÎÒÃÇʵÏÖÁËNginxå´»úºó×Ô¶¯ÖØÆôµÄ¹¦Ð§£¬ÄÇô½Ó×ÅÔÙÄ£ÄâÒ»ÏÂЧÀÍÆ÷·ºÆð¹ÊÕÏʱµÄÇéÐΣº

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"

ÔÚÉÏÊöÀú³ÌÖУ¬ÎÒÃÇͨ¹ýÊÖ¶¯¹Ø±ÕkeepalivedЧÀÍÄ£ÄâÁË»úе¶Ïµç¡¢Ó²¼þË𻵵ÈÇéÐΣ¨ÓÉÓÚ»úе¶ÏµçµÈÇéÐÎ=Ö÷»úÖеÄkeepalivedÀú³ÌÏûÊÅ£©£¬È»ºóÔÙ´ÎÅÌÎÊÁËһϱ¾»úµÄIPÐÅÏ¢£¬ºÜÏÔׯῴµ½VIPÏûÊÅÁË£¡

ÏÖÔÚÔÙÇл»µ½ÁíÍâһ̨»úе£º192.168.12.130À´¿´¿´ÇéÐΣº

4¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡"

ÏÖÔÚÎÒÃǻᷢÃ÷£¬ÔÚÖ÷»ú192.168.12.129å´»úºó£¬VIP×Ô¶¯´ÓÖ÷»úÆ®ÒƵ½ÁË´Ó»ú192.168.12.130ÉÏ£¬¶ø´Ëʱ¿Í»§¶ËµÄÇëÇó¾Í×îÖÕ»áÀ´µ½130Õą̂»úеµÄNginxÉÏ¡£

¡¸¡¸×îÖÕ£¬Ê¹ÓÃKeepalived¶ÔNginx×öÁËÖ÷´ÓÈȱ¸Ö®ºó£¬ÎÞÂÛÊÇÓöµ½ÏßÉÏå´»úÕվɻú·¿¶ÏµçµÈÖÖÖÖ¹ÊÕÏʱ£¬¶¼Äܹ»È·±£Ó¦ÓÃϵͳÄܹ»ÎªÓû§Ìṩ7×24СʱЧÀÍ¡£¡¹¡¹

Ê®ËÄ¡¢NginxÐÔÄÜÓÅ»¯

µ½ÕâÀïÎÄÕµÄƪ·ù½Ï³¤ÁË£¬×îºóÔÙÀ´ÁÄһϹØÓÚNginxµÄÐÔÄÜÓÅ»¯£¬Ö÷Òª¾Í¼òÆÓ˵˵ÊÕÒæ×î¸ßµÄ¼¸¸öÓÅ»¯ÏÔÚÕâ¿é¾Í²»ÔÙÕö¿ªÐðÊöÁË£¬ÊÂʵӰÏìÐÔÄܶ¼Óж෽ÃæÔµ¹ÊÔ­Óɵ¼ÖµÄ£¬ºÃ±ÈÍøÂ硢ЧÀÍÆ÷Ó²¼þ¡¢²Ù×÷ϵͳ¡¢ºó¶ËЧÀÍ¡¢³ÌÐò×ÔÉí¡¢Êý¾Ý¿âЧÀ͵È¡£

ÓÅ»¯Ò»£º·­¿ª³¤ÅþÁ¬ÉèÖÃ

ͨ³£Nginx×÷ΪÊðÀíЧÀÍ£¬ÈÏÕæ·Ö·¢¿Í»§¶ËµÄÇëÇó£¬ÄÇô½¨Ò鿪ÆôHTTP³¤ÅþÁ¬£¬Óû§ïÔÌ­ÎÕÊֵĴÎÊý£¬½µµÍЧÀÍÆ÷ÏûºÄ£¬ÏêϸÈçÏ£º

upstream xxx {  
    # ³¤ÅþÁ¬Êý  
    keepalive 32;  
    # ÿ¸ö³¤ÅþÁ¬ÌṩµÄ×î´óÇëÇóÊý  
    keepalived_requests 100;  
    # ÿ¸ö³¤ÅþÁ¬Ã»ÓÐеÄÇëÇóʱ£¬¼á³ÖµÄ×ʱ¼ä  
    keepalive_timeout 60s;  
}

µÇ¼ºó¸´ÖÆ

ÓÅ»¯¶þ¡¢¿ªÆôÁ㿽±´ÊÖÒÕ

Á㿽±´Õâ¸ö¿´·¨£¬ÔÚ´ó´ó¶¼ÐÔÄܽÏΪ²»´íµÄÖÐÑë¼þÖж¼ÓзºÆð£¬ÀýÈçKafka¡¢NettyµÈ£¬¶øNginxÖÐÒ²¿ÉÒÔÉèÖÃÊý¾ÝÁ㿽±´ÊÖÒÕ£¬ÈçÏ£º

sendfile on; # ¿ªÆôÁ㿽±´»úÖÆ

µÇ¼ºó¸´ÖÆ

Á㿽±´¶ÁÈ¡»úÖÆÓë¹Å°å×ÊÔ´¶ÁÈ¡»úÖƵÄÇø±ð£º

¡¸¹Å°å·½·¨£º¡¹ Ó²¼þ–>Äں˖>Óû§¿Õ¼ä–>³ÌÐò¿Õ¼ä–>³ÌÐòÄں˿ռä–>ÍøÂçÌ×½Ó×Ö

¡¸Á㿽±´·½·¨£º¡¹ Ó²¼þ–>Äں˖>³ÌÐòÄں˿ռä–>ÍøÂçÌ×½Ó×Ö

´ÓÉÏÊöÕâ¸öÀú³Ì±ÈÕÕ£¬ºÜÈÝÒ×¾ÍÄÜ¿´³öÁ½ÕßÖ®¼äµÄÐÔÄÜÇø±ð¡£

ÓÅ»¯Èý¡¢¿ªÆôÎÞÑÓ³Ù»ò¶à°ü¹²·¢»úÖÆ

ÔÚNginxÖÐÓÐÁ½¸ö½ÏΪҪº¦µÄÐÔÄܲÎÊý£¬¼´tcp_nodelay¡¢tcp_nopush£¬¿ªÆô·½·¨ÈçÏ£º

tcp_nodelay on;  
tcp_nopush on;

µÇ¼ºó¸´ÖÆ

TCP/IPЭÒéÖÐĬÈÏÊǽÓÄÉÁËNagleËã·¨µÄ£¬¼´ÔÚÍøÂçÊý¾Ý´«ÊäÀú³ÌÖУ¬Ã¿¸öÊý¾Ý±¨ÎIJ¢²»»áÁ¢Âí·¢ËͳöÈ¥£¬¶øÊÇ»áÆÚ´ýÒ»¶Îʱ¼ä£¬½«ºóÃæµÄ¼¸¸öÊý¾Ý°üÒ»Æð×éºÏ³ÉÒ»¸öÊý¾Ý±¨ÎÄ·¢ËÍ£¬µ«Õâ¸öËã·¨ËäÈ»Ìá¸ßÁËÍøÂçÍÌÍÂÁ¿£¬¿ÉÊÇʵʱÐÔÈ´½µµÍÁË¡£

Òò´ËÄãµÄÏîÄ¿ÊôÓÚ½»»¥ÐÔºÜÇ¿µÄÓ¦Óã¬ÄÇô¿ÉÒÔÊÖ¶¯¿ªÆôtcp_nodelayÉèÖã¬ÈÃÓ¦ÓóÌÐòÏòÄں˵ݽ»µÄÿ¸öÊý¾Ý°ü¶¼»áÁ¬Ã¦·¢ËͳöÈ¥¡£µ«ÕâÑù»á±¬·¢´ó×ÚµÄTCP±¨ÎÄÍ·£¬ÔöÌíºÜ´óµÄÍøÂ翪Ïú¡£

Ïà·´£¬ÓÐЩÏîÄ¿µÄÓªÒµ¶ÔÊý¾ÝµÄʵʱÐÔÒªÇó²¢²»¸ß£¬×·ÇóµÄÔòÊǸü¸ßµÄÍÌÍ£¬ÄÇôÔò¿ÉÒÔ¿ªÆôtcp_nopushÉèÖÃÏÕâ¸öÉèÖþÍÀàËÆÓÚ¡°Èû×Ó¡±µÄÒâ˼£¬Ê×ÏȽ«ÅþÁ¬Èûס£¬Ê¹µÃÊý¾ÝÏȲ»·¢³öÈ¥£¬±È¼°°ÎÈ¥Èû×ÓºóÔÙ·¢³öÈ¥¡£ÉèÖøÃÑ¡Ïîºó£¬Äں˻áÖ»¹Ü°ÑСÊý¾Ý°üÆ´½Ó³ÉÒ»¸ö´óµÄÊý¾Ý°ü£¨Ò»¸öMTU£©ÔÙ·¢ËͳöÈ¥.

ËäÈ»Èôһ׼ʱ¼äºó£¨Ò»Ñùƽ³£Îª200ms£©£¬ÄÚºËÈÔȻûÓлýÀÛµ½Ò»¸öMTUµÄÁ¿Ê±£¬Ò²±ØÐè·¢ËÍÏÖÓеÄÊý¾Ý£¬²»È»»áÒ»Ö±ÛÕ±Õ¡£

tcp_nodelay¡¢tcp_nopushÁ½¸ö²ÎÊýÊÇ¡°»¥³â¡±µÄ£¬ÈôÊÇ×·ÇóÏìÓ¦ËÙÂʵÄÓ¦ÓÃÍƼö¿ªÆôtcp_nodelay²ÎÊý£¬ÈçIM¡¢½ðÈÚµÈÀàÐ͵ÄÏîÄ¿¡£ÈôÊÇ×·ÇóÍÌÍÂÁ¿µÄÓ¦ÓÃÔò½¨Ò鿪Æôtcp_nopush²ÎÊý£¬Èçµ÷Àíϵͳ¡¢±¨±íϵͳµÈ¡£

×¢ÖØ£º¢Ùtcp_nodelayÒ»Ñùƽ³£Òª½¨ÉèÔÚ¿ªÆôÁ˳¤ÅþÁ¬Ä£Ê½µÄÇéÐÎÏÂʹÓᣢÚtcp_nopush²ÎÊýÊDZØÐèÒª¿ªÆôsendfile²ÎÊý²Å¿ÉʹÓõÄ¡£

ÓÅ»¯ËÄ¡¢µ÷½âWorkerÊÂÇéÀú³Ì

NginxÆô¶¯ºóĬÈÏÖ»»á¿ªÆôÒ»¸öWorkerÊÂÇéÀú³Ì´¦Àí¿Í»§¶ËÇëÇ󣬶øÎÒÃÇ¿ÉÒÔƾ֤»úеµÄCPUºËÊý¿ªÆô¶ÔÓ¦ÊýÄ¿µÄÊÂÇéÀú³Ì£¬ÒÔ´ËÀ´ÌáÉýÕûÌåµÄ²¢·¢Á¿Ö§³Ö£¬ÈçÏ£º

# ×Ô¶¯Æ¾Ö¤CPU½¹µãÊýµ÷½âWorkerÀú³ÌÊýÄ¿  
worker_processes auto;

µÇ¼ºó¸´ÖÆ

ÊÂÇéÀú³ÌµÄÊýÄ¿×î¸ß¿ªµ½8¸ö¾ÍOKÁË£¬8¸öÖ®ºó¾Í²»»áÓÐÔÙ´óµÄÐÔÄÜÌáÉý¡£

ͬʱҲ¿ÉÒÔÉÔ΢µ÷½âÒ»ÏÂÿ¸öÊÂÇéÀú³ÌÄܹ»·­¿ªµÄÎļþ¾ä±úÊý£º

# ÿ¸öWorkerÄÜ·­¿ªµÄÎļþÐÎò·û£¬×îÉÙµ÷½âÖÁ1WÒÔÉÏ£¬¸ººÉ½Ï¸ß½¨Òé2-3W  
worker_rlimit_nofile 20000;

µÇ¼ºó¸´ÖÆ

²Ù×÷ϵͳÄںˣ¨kernel£©¶¼ÊÇʹÓÃÎļþÐÎò·ûÀ´»á¼ûÎļþ£¬ÎÞÂÛÊÇ·­¿ª¡¢Ð½¨¡¢¶ÁÈ¡¡¢Ð´ÈëÎļþʱ£¬¶¼ÐèҪʹÓÃÎļþÐÎò·ûÀ´Ö¸¶¨´ý²Ù×÷µÄÎļþ£¬Òò´Ë¸ÃÖµÔ½´ó£¬´ú±íÒ»¸öÀú³ÌÄܹ»²Ù×÷µÄÎļþÔ½¶à£¨µ«²»¿ÉÁè¼ÝÄÚºËÏÞÖÆ£¬×î¶à½¨Òé3.8W×óÓÒΪÉÏÏÞ£©¡£

ÓÅ»¯Îå¡¢¿ªÆôCPUÇ׺ͻúÖÆ

¹ØÓÚ²¢·¢±à³Ì½ÏΪÊìϤµÄͬ°é¶¼ÖªµÀ£¬ÓÉÓÚÀú³Ì/Ïß³ÌÊýÍùÍù¶¼»áÔ¶Áè¼ÝϵͳCPUµÄ½¹µãÊý£¬ÓÉÓÚ²Ù×÷ϵͳִÐеÄÔ­ÀíʵÖÊÉÏÊǽÓÄÉʱ¼äƬÇл»»úÖÆ£¬Ò²¾ÍÊÇÒ»¸öCPU½¹µã»áÔÚ¶à¸öÀú³ÌÖ®¼äһֱƵÈÔÇл»£¬Ôì³ÉºÜ´óµÄÐÔÄÜÏûºÄ¡£

¶øCPUÇ׺ͻúÖÆÔòÊÇÖ¸½«Ã¿¸öNginxµÄÊÂÇéÀú³Ì£¬°ó¶¨ÔÚÀο¿µÄCPU½¹µãÉÏ£¬´Ó¶ø¼õСCPUÇл»´øÀ´µÄʱ¼ä¿ªÏúºÍ×ÊÔ´ÏûºÄ£¬¿ªÆô·½·¨ÈçÏ£º

worker_cpu_affinity auto;

µÇ¼ºó¸´ÖÆ

ÓÅ»¯Áù¡¢¿ªÆôepollÄ£×Ó¼°µ÷½â²¢·¢ÅþÁ¬Êý

ÔÚ×î×îÏȾÍÌáµ½¹ý£ºNginx¡¢Redis¶¼ÊÇ»ùÓڶ෸´ÓÃÄ£×ÓȥʵÏֵijÌÐò£¬µ«×î³õ°æµÄ¶à·¸´ÓÃÄ£×Óselect/poll×î´óÖ»ÄܼàÌý1024¸öÅþÁ¬£¬¶øepollÔòÊôÓÚselect/poll½Ó¿ÚµÄÔöÇ¿°æ£¬Òò´Ë½ÓÄɸÃÄ£×ÓÄܹ»ºéÁ÷ƽÉÏÌáÉýµ¥¸öWorkerµÄÐÔÄÜ£¬ÈçÏ£º

events {  
    # ʹÓÃepollÍøÂçÄ£×Ó  
    use epoll;  
    # µ÷½âÿ¸öWorkerÄܹ»´¦ÀíµÄÅþÁ¬ÊýÉÏÏÞ  
    worker_connections  10240;  
}

µÇ¼ºó¸´ÖÆ

ÕâÀï¹ØÓÚselect/poll/epollÄ£×ӾͲ»Õö¿ªÏ¸ËµÁË£¬ºóÃæµÄIOÄ£×ÓÎÄÕÂÖлáÏêϸÆÊÎö¡£

Ê®Îå¡¢·ÅÔÚ×îºóµÄ×îºó

ÖÁ´Ë£¬NginxµÄ´ó²¿·ÖÄÚÈݶ¼ÒÑÐðÊöÍê±Ï£¬¹ØÓÚ×îºóһС½ÚµÄÐÔÄÜÓÅ»¯ÄÚÈÝ£¬×ÅʵÔÚÇ°Ãæ¾Í̸µ½µÄÐÂÎÅÊèÉ¢¡¢·ÖÅÉ»º³åÇø¡¢×ÊÔ´»º´æ¡¢·ÀµÁÁ´¡¢×ÊԴѹËõµÈÄÚÈÝ£¬Ò²¶¼¿É¹éÄÉΪÐÔÄÜÓÅ»¯µÄ¼Æ»®¡£

ÒÔÉϾÍÊÇ14¸öNginxµÄ½¹µã¹¦Ð§µã£¬½¨ÒéÕä²Ø£¡µÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡

ÃâÔð˵Ã÷£ºÒÔÉÏչʾÄÚÈÝȪԴÓÚÏàÖúýÌå¡¢ÆóÒµ»ú¹¹¡¢ÍøÓÑÌṩ»òÍøÂçÍøÂçÕûÀí£¬°æȨÕùÒéÓë±¾Õ¾Î޹أ¬ÎÄÕÂÉæ¼°¿´·¨Óë¿´·¨²»´ú±í×ðÁú¿­Ê±¹ÙÍøµÇ¼ÂËÓÍ»úÍø¹Ù·½Ì¬¶È£¬Çë¶ÁÕß½ö×ö²Î¿¼¡£±¾ÎĽӴýתÔØ£¬×ªÔØÇë˵Ã÷À´ÓÉ¡£ÈôÄúÒÔΪ±¾ÎÄÇÖÕ¼ÁËÄúµÄ°æȨÐÅÏ¢£¬»òÄú·¢Ã÷¸ÃÄÚÈÝÓÐÈκÎÉæ¼°ÓÐÎ¥¹«µÂ¡¢Ã°·¸Ö´·¨µÈÎ¥·¨ÐÅÏ¢£¬ÇëÄúÁ¬Ã¦ÁªÏµ×ðÁú¿­Ê±¹ÙÍøµÇ¼ʵʱÐÞÕý»òɾ³ý¡£

Ïà¹ØÐÂÎÅ

ÁªÏµ×ðÁú¿­Ê±¹ÙÍøµÇ¼

18523999891

¿É΢ÐÅÔÚÏß×Éѯ

ÊÂÇéʱ¼ä£ºÖÜÒ»ÖÁÖÜÎ壬9:30-18:30£¬½ÚãåÈÕÐÝÏ¢

QR code
ÍøÕ¾µØͼ