วิธีติดตั้ง + config NGINX แบบไม่ต้องยุ่งอะไรกับ DA เลย ไม่ต้อง Run Cron, ไม่แก้ unlimit, รูปขึ้นทุกเว็บ

ปรับปรุงล่าสุด 11/09/2011 11.15 น. แก้ไขให้รองรับสำหรับคนใช้ csf รุ่นใหม่

ก่อนอื่นแจ้งว่าที่ไม่อยากโพสในกระทู้เดิมเพราะค่อนข้างยาวและรายละเอียดต่างกันพอสมควรครับ. จากกระทู้เดิมผมลองแล้วชอบทุกอย่างยกเว้น

  1. เวลาสร้าง user ใหม่พบว่ารูปไม่ขึ้นต้องสั่งตามด้านล่าง (เครดิต น้องมีน) ซึ่งถ้ามี user จ่ายผ่าน paypal กลางคืนเช้าเมล์เข้าแล้วบ่นว่ารูปไม่ขึ้น. (ปัญหานี้อาจเป็นกับผมคนเดียวและไม่สามารถถือว่าเป็นปัญหาที่มาจากกระทู้เดิมได้)
rm -f /usr/local/directadmin/data/users/*/nginx.conf

cat /dev/null > /usr/local/nginx/etc/virtual.conf



#Rewrite All

/usr/local/directadmin/scripts/nginx_direct.sh all 
  1. ผมไม่รู้ว่า ทำไมต้อง run cron ผมไม่อยาก cron คำสั่งอะไรที่ผมไม่รู้แน่ชัดว่าทำไปเพื่ออะไร.
crontab -e

* * * * * /usr/local/directadmin/scripts/nginx_task.sh
  1. ผมไม่ต้องการแก้ไขอะไรกับ DA ด้วย file ที่ไม่ใช่ Official release จาก Directadmin.com ผมเคยเมล์ถาม john (DA support) เกี่ยวกับ nginx ได้คำตอบว่าไม่มีนโยบายเกี่ยวกับ nginx เลย. ดังนั้นผมจะไม่จับ nginx ไปยุ่งกับ DA เลยนี่คือโจทย์ของผม

โอเคเริ่มเลยแล้วกัน. วิธีด้านล่างสามารถใช้ได้ทั้ง Cli และ CGI โดยไม่ต้องยุ่งกับ Directadmin เลย และไม่ต้องปรับค่า unlimit (อันหลังตรง unlimit ผมไม่ชัวร์นะครับเพราะไม่รู้ว่าแต่ละเครื่องต่างกันหรือเปล่าแต่โดยส่วนตัวผมไม่ได้รับค่านี้เลย. แต่โดยหลักแล้ว nginx run ด้วย user คือ apache อะไรที่ apache ทำได้ nginx ก็ควรจะทำได้เหมือนกัน). ข้อมูลเกี่ยวกับ server ของผมที่ผมใช้ test คือ

apache 2.2.19

php 5.2.16 + suhosin patch + complie แบบ cli

ขั้นตอนที่ 1: ติดตั้ง nginx ก่อน โดยผมจะติดตั้งเพิ่ม 3 module



wget http://nginx.org/download/nginx-1.1.0.tar.gz

tar xvfz nginx-1.1.0.tar.gz

cd nginx-1.1.0

./configure --sbin-path=/usr/local/sbin --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module

make

make install


ดูจากกระทู้เดิมผมยังไม่เข้าใจว่าในไฟล์ nginx.conf สั่ง gzip ได้ยังไงเพราะยังไม่ติดตั้ง mod หรือว่า gzip มีอยู่แล้วใน linux อันนี้ผมไม่แน่ใจจริง ๆ ค่อนข้างจะ งง ๆ

ขั้นตอนที่ 2: แก้ไขไฟล์ nginx.conf + สร้าง dir เก็บ log

nano -w /usr/local/nginx/conf/nginx.conf

โดย code ที่ผมใช้ประยุกต์มาจากกระทู้เก่า (ห้ามเป็นนักกอล์ฟนะครับมีส่วนที่ต้องแก้ ip ด้วยแก้ก่อนเอาไปใช้นะครับ)

user apache apache;

worker_processes 4; # Set it according to what your CPU have. 4 Cores = 4

worker_rlimit_nofile 8192;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

}

http {

include       mime.types;

default_type  application/octet-stream;



log_format main '$remote_addr - $remote_user [$time_local] '

                '"$request" $status  $body_bytes_sent "$http_referer" '

                '"$http_user_agent" "$http_x_forwarded_for"';



server_tokens off;

access_log  /var/log/nginx/access.log  main;

error_log  /var/log/nginx/error_log debug;



server_names_hash_bucket_size 64;

sendfile on;

tcp_nopush     on;

tcp_nodelay    off;

keepalive_timeout  30;

gzip  on;

gzip_comp_level 9;

gzip_proxied any;



proxy_buffering on;

proxy_cache_path /usr/local/nginx/proxy_temp levels=1:2 keys_zone=one:15m inactive=7d max_size=1000m;

proxy_buffer_size 16k;

proxy_buffers 100 8k;

proxy_connect_timeout      60;

proxy_send_timeout         60;

proxy_read_timeout         60;



server {

  listen [color="#FF0000"][b]ไอพีของคุณเองนะ[/b][/color]:85 default rcvbuf=8192 sndbuf=16384 backlog=32000; # Real IP here

  server_name domain.name  _ ;     # "_" is for handle all hosts that are not described by server_name

  charset off;

  access_log  /var/log/nginx/nginx_host_general.access.log  main;

  location / {

    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://[color="#FF0000"][b]ไอพีของคุณเองนะ[/b][/color];    # Real IP here และไม่มี / ปิดท้าย

    client_max_body_size       16m;

    client_body_buffer_size    128k;

    proxy_buffering     on;

    proxy_connect_timeout      90;

    proxy_send_timeout         90;

    proxy_read_timeout         120;

    proxy_buffer_size          16k;

    proxy_buffers              32 32k;

    proxy_busy_buffers_size    64k;

    proxy_temp_file_write_size 64k;

  }

  

  location ~* ^/(phpmyadmin|webmail|squirrelmail|uebimiau|roundcube)/.+\.(jpg|jpeg|gif|png|ico|css|zip|tar|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|wmv|avi|cur|swf|mp3|wma|htc|cur)$ {

  root /var/www/html/;

  expires 30d;

  access_log off;

  }

  

location ~* ^/(stats)/.+\.(jpg|jpeg|gif|png|html|htm)$ {

root /var/www/html/;

access_log off;

}

  

  location ~* ^/(mrtg|imrtg)/.+\.(jpg|jpeg|gif|png|html|htm)$ {

  root /var/www/html/;

  access_log off;

  }

  

  location /nginx_status {

           stub_status on;

           access_log   off;

           allow [color="#FF0000"][b]ใส่ไปตามต้องการ[/b][/color]; # Real IP here

           allow 127.0.0.1;

           deny all;

           }

  

}

# เพื่อไว้สำหรับคนที่จะแยกค่า conf นะครับ. ไฟล์ตามด้านล่างของผมคือไฟล์ว่างเปล่า

include /usr/local/nginx/etc/*.conf;

}

อย่าลืมสร้าง Dir คือ

/var/log/nginx

และสร้างไฟล์

touch access.log

touch error_log

touch nginx_host_general.access.log

ขั้นตอนที่ 3: สร้างไฟล์เพื่อ start/stop/restart nginx service + pid

ต้องสร้าง pid ตามที่ระบุไว้ในไฟล์ .conf ตามข้อสองด้วยครับ

touch /var/run/nginx.pid

จากนั้นสร้างไฟล์เพื่อ start/stop/restart nginx service

touch /etc/init.d/nginx

จากนั้นแก้ไขโค๊ด

nano -w /etc/init.d/nginx

ใส่ค่าคือ (เครดิต http://www.hikaro.com/linux/centos/nginx-init-script.html )

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemin

# Taken from http://www.hikaro.com

# chkconfig:   - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

#               proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /usr/local/nginx/conf/nginx.conf

# pidfile:     /usr/local/nginx/logs/nginx.pid



# Source function library.

. /etc/rc.d/init.d/functions



# Source networking configuration.

. /etc/sysconfig/network



# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0



nginx="/usr/local/sbin/nginx"

prog=$(basename $nginx)



NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"



lockfile=/var/lock/subsys/nginx



start() {

    [ -x $nginx ] || exit 5

    [ -f $NGINX_CONF_FILE ] || exit 6

    echo -n $"Starting $prog: "

    daemon $nginx -c $NGINX_CONF_FILE

    retval=$?

    echo

    [ $retval -eq 0 ] && touch $lockfile

    return $retval

}



stop() {

    echo -n $"Stopping $prog: "

    killproc $prog -QUIT

    retval=$?

    echo

    [ $retval -eq 0 ] && rm -f $lockfile

    return $retval

}



restart() {

    configtest || return $?

    stop

    start

}



reload() {

    configtest || return $?

    echo -n $"Reloading $prog: "

    killproc $nginx -HUP

    RETVAL=$?

    echo

}



force_reload() {

    restart

}



configtest() {

  $nginx -t -c $NGINX_CONF_FILE

}



rh_status() {

    status $prog

}



rh_status_q() {

    rh_status >/dev/null 2>&1

}



case "$1" in

    start)

        rh_status_q && exit 0

        $1

        ;;

    stop)

        rh_status_q || exit 0

        $1

        ;;

    restart|configtest)

        $1

        ;;

    reload)

        rh_status_q || exit 7

        $1

        ;;

    force-reload)

        force_reload

        ;;

    status)

        rh_status

        ;;

    condrestart|try-restart)

        rh_status_q || exit 0

            ;;

    *)

        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

        exit 2

esac




เปลี่ยน mod ด้วยครับ

chmod +x /etc/init.d/nginx

ขั้นตอนที่ 4: ทดสอบก่อนใช้งานจริง (สำคัญมาก)

ให้สั่ง

service nginx restart

จากนั้นลองเข้าเว็บดู

http://www.domain.com:85

การเทสหนึ่งรูปต้องขึ้นทั้งหมด, สอง mod_rewrite ต้องใช้ได้ทั้งหมด, สามเทส sub domain ต้องทำงานได้ปกติทั้งหมด. ถ้าขาดแม้ข้อเดียวห้ามเปิดใช้งานจริงเพราะไม่ถือว่าเสถียรพอจะใช้ในระดับ sever production ได้.

ขั้นตอนที่ 5: Forward port

5.1 สำหรับคนที่ไม่ได้ใช้ csf (คือใช้ iptables)

ให้สั่ง

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 85

ในกรณีที่เกิดข้อผิดพลาดใด ๆ ก็ตามจะรูปไม่ขึ้นเหมือนตอนที่เทสก็ดีหรือ server load ผิดปกติให้สั่งย้อนคำสั่งด้านบน (เครดิตน้องมีน)

iptables -t nat -D PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 85 

หลังจาก FW port แล้วให้ตรวจสอบเว็บไซต์อีกครั้งแบบเดียวกับที่ทำในขั้นตอนที่ 4

5.2 สำหรับคนใช้ csf

เนื่องจาก csf รุ่น version ใหม่ถ้าจะสั่ง FW Port ต้องทำผ่าน csf เท่านั้นทำผ่าน iptables ตรง ๆ ไม่ได้ครับ

วิธีการคือเพิ่ม line

|80||85|tcp

เข้าไปที่ feature “Firewall redirect”

จากนั้น restart csf

ขั้นตอนที่ 6: ติดตั้อง mod_rpaf ให้กับ apache เพื่อให้ log ตรง

(Copy ของคุณ KKE มาเลยจากกระทู้ varnish)

#wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

#tar xzf mod_rpaf-0.6.tar.gz

#apxs -cia mod_rpaf-2.0.c

จากนั้นแก้ไขไฟล์

/etc/httpd/conf/extra/httpd-includes.conf

โดยเพิ่มคำสั่งนี้ไว้ท้ายไฟล์ครับ

LoadModule rpaf_module /usr/lib/apache/mod_rpaf-2.0.so

RPAFenable On

RPAFsethostname On

RPAFproxy_ips ไอพีเซิร์ฟเวอร์ของคุณอันเดียวกับที่ใส่ใน nginx แหละ

RPAFheader X-Forwarded-For

ขั้นตอนที่ 7: สั่งให้ nginx ทำงานทันทีเมื่อ restart เครื่องและ save iptables จากข้อ 5

/sbin/chkconfig nginx on

และ

/etc/init.d/iptables save

ข้อมูลควรรู้อื่น ๆ

  1. สามารถเข้าดู nginx status ได้โดยพิมพ์ http://ip/nginx_status ตาม stub_status ที่เราสั่งติดตั้งไปจากข้อ 1

  2. วิธีเพิ่ม nginx ลงที่หน้าดู service ของ Directadmin (เครดิตคุณแมน KKE)

nano -w /usr/local/directadmin/data/admin/services.status

จากนั้นเพิ่มโค๊ดด้านล่างไปที่ท้ายสุดของไฟล์

nginx=ON
  1. โดยส่วนตัวผมมองว่า log ของ nginx น่าเบื่อมากและบวมเร็วสุด ๆ ผมดูใน error log พบว่า log ส่วนมากจะเป็น “(110: Connection timed out)”. ผมมองว่า log แบบนี้ผมไม่ต้องการเพราะเกิดขึ้นได้ตลอดเวลาทั้งวันด้วยหลายสาเหตุไม่ว่าคุณจะปรับค่า timeout เพิ่มยังไงก็จะต้องมี error แบบนี้. ส่วน access log ผมก็คิดว่าไม่จำเป็นเพราะ apache ทำการเก็บไว้อยู่แล้วผมไม่อยากให้มีการทำงานซ้ำซ้อน. และเปลือง io ด้วย. ถ้าใครคิดว่าแนวคิดแบบนี้ดีก็แก้ดังนี้นะครับ

แก้ไฟล์ nginx.conf จาก

error_log  /var/log/nginx/error_log debug;

เป็น (จะเก็บ error เฉพาะที่สำคัญจริง ๆ เช่น nginx ล่ม start ไม่ขึ้น)

error_log  /var/log/nginx/error_log crit;

และ

access_log  /var/log/nginx_host_general.access.log  main;

แก้เป็น

access_log  off;
  1. ผลการทดสอบส่วนตัวช่วงวันสองวันนี้คือหลังจากที่พายุเข้าไทยที่ server มีเว็บของศูนย์อุธกวิทยาภาคเหนือตอนบนอยู่และคนเข้ามากมายเพื่อเช็คเรื่องน้ำนี่แหละครับผู้ดูแลเว็บบอกว่าเชียงใหม่น้ำท่วมคนจะเข้ามาดูเว็บมาเพื่อเช็คข้อมูลพอเข้าไปดู apache server status โอ้แม่เจ้ามาเป็นกองทัพเลย. ทำให้ load average ขึ้นไปเยอะพอสมควรคือ 4.xx - 5.xx ตลอด. หลังจากที่ลองใช้ nginx แล้วพบว่า load average กลับมาอยู่ในสถานะปกติอีกครั้งคือ 1-2 ในช่วงปกติ และ 3.xx ในช่วง peak (ช่วง peak ของผมคือตอนเช้าโดยมาจาก exim เป็นหลัก). แต่ทั้งนี้ผลที่ได้จากแต่ละ server ย่อมมีความแตกต่างกันตามปริมาณของการเรียกใช้ static files ถ้าเรียกใช้เยอะอยู่แล้วติด nginx ลงไป load average ก็จะลดลงมากทีเดียวครับ. ยิ่งเป็น server download file จะยิ่งเห็นได้ชัด.

  2. ถ้าท่านลองแล้วเจ๊ง PM มาถามผมได้หรือโพสที่กระทู้นี้ได้เลยผมยินดีอย่างยิ่งที่จะช่วยฟรีไม่คิดค่าใช้จ่ายใด ๆ ทั้งสิ้น.

ท้ายสุดผิดพลาดอย่างไรต้องขออภัยไว้ล่วงหน้า Try with your own risk

.

ขอบคุณครับ เดี๋ยวไว้จะลองเปลี่ยนจาก varnish มาใช้ nginx เทียบดูว่า แบบใหนให้ผลดีกว่ากัน

ปล. สำหรับคนที่ใช้ apf ให้เพิ่มคำสั่ง



iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 85


เข้าไปในไฟล์ /etc/apf/preroute.rules แล้ว restart apf ( #apf -r ) โดยไม่ต้องสั่ง /etc/init.d/iptables save ครับ

ถ้าผิดพลาดก็ไป remark หรือ ลบ บรรทัดที่เพิ่มออก แล้ว restart apf อีกรอบ

ขอบคุณครับ

nginx ปิด log ไปทำงานไวขึ้นอีกนะครับ หากมี access สูงๆ

ตอนนี้ลองสลับจาก varnish มาลองใช้ nginx ดูละครับ เดี๋ยวรอดูผลซัก 1-2 วัน

ปล. ผม run nginx ที่ port 80 แล้วส่ง request ไปที่ apache 8080 (เพราะว่า config ไว้อยู่แล้ว จะสลับกลับไปใช้ varnisg ก็แค่ stop nginx แล้ว start varnish แค่นั้น)

ถ้าเป็นเครื่องที่ยังไม่ config ก็ใช้ preroute ใน firewall ง่ายสุดละ ไม่ต้องไปยุ่งอะไรกับ apache/da เลย

ถ้าปิด log ที่ nginx แล้ว log ที่ apache เป็น ip ของ proxy หรือว่า client-ip ครับ

คิดว่าน่าจะมีปัญหาเดียวกับ varnish ต้องลง mod_rpaf เพิ่มใน apache เพื่อแก้ ip

อ้า ลืมไปเลยครับ. ขอ copy มาจากกระทู้ varnish นะครับ.

ปรับโพสแรกโดยเพิ่มการติดตั้ง mod_rpaf ให้แล้วเป็นขั้นตอนที่ 6

กรณีนี้ค่า RPAFproxy_ips 127.0.0.1 น่าจะเป็น ip server นะครับ

RPAFproxy_ips ipserver

หลังจากไปศึกษากระทู้คุณ KKE สรุปแล้วต้องแก้แบบนี้นะครับ

คือผมทำผิดตรงไฟล์ที่จะเพิ่มปกติผมจะเพิ่มใน httpd-default.conf

ซึ่งที่ถูกต้องจับใส่ไว้ที่

/etc/httpd/conf/extra/httpd-includes.conf

LoadModule rpaf_module /usr/lib/apache/mod_rpaf-2.0.so



<IfModule mod_rpaf-2.0.c>

RPAFenable On

RPAFsethostname On

RPAFproxy_ips 127.0.0.1

RPAFheader X-Forwarded-For

</IfModule>

+1 จขกท ครับ

ผมไม่รู้ว่าผมเข้าใจถูกหรือเปล่านะครับ

การ config ที่ว่าไม่ได้ต่างอะไรกับ Proxy ธรรมดาครับ

ไม่ต่างกับ squid หรือ varnish

Proxy ปัญหาคือมันต้องสร้างสำเนาไฟล์ แล้วเอาสำเนาไฟล์ที่มีการเรียกบ่อยๆ ขึ้นมาแสดง ซึ่งเรามีการตั้งค่าการจัดเก็บไว้จำกัด

Nginx อันก่อนนั้นที่ยุ่งกับ DA เพราะต้องการ config ให้ Nginx ไปอ่านไฟล์ที่เป็น static ตรงๆ ไม่ต้องสร้างสำเนาอีก

จริงๆ แล้วถ้าใช้แบบ proxy นั้นก็จะดีเฉพาะไฟล์เล็กๆ ที่เป็นรูปภาพ เท่านั้น แต่ถ้าเป็นไฟล์ใหญ่ๆ เช่น MP3, zip ,tar,iso จะเห็นได้ชัดว่าแบบ proxy มันจะไม่สำเนาเพราะมันใหญ่เกินไป

ถ้าผมเข้าใจผิดก็ค้านผมได้เลยนะครับ เพราะผมไม่ได้อ่าน config ละเอียด

อีกเรื่องครับ แต่ก่อนผมใช้ squid แล้วจะมีปัญหากับลูกค้าย้ายโดเมนมาใช้ที่ host ซึ่งมันยังจำชื่อโดเมนเป็น IP เก่า ซึ่งเกิด Access Deny ผมแก้โดยการตั้งให้ DNS Server เป็น 127.0.0.1 ด้วย เพื่อไม่ให้มัน query DNS ไป IP อื่น

ดูจาก config น่าจะเป็นแบบที่ว่าครับ

เท่าที่ทดสอบดูแล้วพบว่ามีการสร้าง connection สูงกว่า varnish เท่าตัว และ server load สูงกว่านิดหน่อย

แต่ทั้ง nginx และ varnish ลดโหลด server ไปได้นิดเดียว เมื่อเทียบกับ apache เพียวๆ อาจเป็นเพราะ

  1. nginx กำหนดขนาดไฟล์ที่ cache ไว้เล็กไป ทำให้ส่วนที่ไม่ cache ก็ยังส่งไปที่ apache เหมือนเดิม

  2. varnish ใช้ ram ในการเก็บ cache ซึ่งเครื่องผม ram น้อยกำหนด cache ได้ไม่มาก ทำให้ขนาด cache ไม่ใหญ่พอที่จะเห็นผลชัดเจน

ส่วน nginx แบบยุ่งกับ da นี่ หลายขั้นตอนเหมือนกัน แต่ดูแล้วน่าจะให้ผลดีที่สุด และใช้ ram น้อยสุด คงต้องลองดูซะหน่อย

nginx ไม่ว่าจะเซตแบบไหนก็ไม่มี cache นะครับ - -’

ผมไม่แน่ใจว่า connection ที่สูงกว่าของ nginx กับ varnish จะเทียบกันแบบไหนเพราะ varnish ทำบน ram ซึ่งน่าจะเร็วกว่าและพร้อมใช้งานทันทีแต่ nginx น่าจะทำบน disk

เรื่อง ram ผมเคยลองทั้งสามแบบ (เฉพาะบน server ผมเองนะครับคนอื่นทดลองผลอาจไม่เหมือนกันได้) ลองแล้วไม่แตกต่างกันถึงขนาดเรียกว่า มีนัยสำคัญ ผลที่ได้จาก apache อย่างเดียวถือว่าแย่ที่สุด ram ใช้มากที่สุด. ส่วน nginx ที่ config ทั้งสองแบบถือว่าไม่แตกต่างการจัดการ ram ถือว่าดีครับ.

วิธีที่ผมใช้เปรียบเทียบคือเทียบผ่าน mod http_stub_status (คือเข้าทาง ip/nginx_status) จากการลองทั้งสองแบบไม่พบความแตกต่างที่เป็นนัยสำคัญ. ค่าที่ได้

Active connections: xxx

server accepts handled requests

 761419 761419 3005731 

Reading: x Writing: x Waiting: xxx


ไม่แตกต่างกันเลยคือ nginx ยังทำงานเท่าเดิมส่วนที่มันทำไม่ได้ก็จะถูกผลักไปที่ @ back ที่กำหนดไว้ใน location จาก config. ซึ่งก็คือ apache นั่นเอง. เพียงแต่การทำ config แยกสำหรับทุก ๆ domain และ sub domain นั้น nginx จะต้อง include คำสั่งหลายหมื่น line หรือเป็น แสน line ก่อนจะเริ่มทำงานได้

ผมคงปักหลักใช้แบบนี้ดูก่อน คงต้องปรับแก้ config ขนาด buffer cache ให้เหมาะสมกับการใช้งาน

ขอบคุณครับ

ขอบคุณครับ เป็นความรู้กับผมอย่างมากครับกำลังหาอยู่พอดีครับ

เพิ่มนิดหน่อยสำหรับคนใช้ csf เซ็งเป็ดเลยคือมันเพิ่ม feature firewall redirect ขึ้นมา ทำให้ rule ที่เราเขียนใน iptables ให้ redirect จาก port 80 ไป 85 จะใช้ไม่ได้เมื่อเราสั่ง

csf --start

วิธีแก้สำหรับ csf รุ่นล่าสุดคือเพิ่ม line

|80||85|tcp

เข้าไปที่ feature “Firewall redirect”

สอบถามหน่อยครับคือได้นำมาใช้ใน Server แล้วเจอปัญหาคือบางทีมันโหลดรูปไม่ขึ้นครบแก้ยังไงครับเวลามีการใช้งานหนักๆ

ให้ลองเพิ่ม location

location @back {

            proxy_pass              http://ไอ้พี;

            proxy_redirect off;

            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 ทำไม่ได้ก็จะส่งไปให้ apache เหมือนเดิม.

ขอบคุณมากๆครับ เพราะว่า Process เยอะมาก 100กว่าดูที่ Nginx_status