Nginx — 你網頁的好夥伴

林鼎淵
Dean Lin
Published in
5 min readJun 10, 2020

--

這個好用的網頁伺服器工具最近兩年被我大量使用,因為他的設定簡單,功能強大,在這裡我會把分幾個部分做說明:

  1. 安裝(ubuntu環境)
  2. 防火牆設定
  3. 常用操作
  4. 曾經遇到的坑
  5. 相關參考資源

安裝(ubuntu環境)

sudo apt-get updatesudo apt install nginxsudo systemctl start nginxsudo systemctl enable nginx

防火牆設定

sudo ufw allow ssh  // 允許ssh登入作業sudo ufw allow 80  // 允許httpsudo ufw allow 443  // 允許httpssudo ufw allow ‘Nginx HTTP’sudo ufw enable // 啟動防火牆sudo ufw status // 列出當前防火牆狀態sudo ufw status numbered  // 列出當前防火牆規則號碼(通常都是為了刪除)sudo ufw delete 2 // 刪除防火牆特定規則

常用操作

sudo systemctl restart nginx  // 重啟sudo /etc/init.d/apache2 stop  // 暫停apacheservice php7.3-fpm restart // php的conf修改後需要重啟

曾經遇到的坑

413 Request Entity Too Large

如果有用nginx當loadbalance,記得/etc/nginx/sites-enabled/default的部分也要做相對應的調整

client_max_body_size 2000M;sudo service nginx restart

Git clone through Nginx proxy for Gitlab server is not working

可參考stackoverflow

ssh_exchange_identification: Connection closed by remote host

因為/etc/nginx/sites-enabled/default的地方修改無效

所以要在上一層/etc/nginx/nginx.conf做修正

stream {
server {
listen 223;
listen [::]:223;
proxy_pass 192.xxx.xxx.xxx:22; //目標ip:ssh port
}
}
sudo service nginx restart

server關機重啟後頁面 404

因為安裝php的時候apache有時沒注意會被順便安裝起來

首先檢查是否被apache佔用

sudo netstat -lpn |grep 80

如果是的話可以把apache暫停或是刪除

sudo /etc/init.d/apache2 stop  // 暫停apache// 下面是刪除的方法
sudo apt-get purge apache2 apache2-utils apache2.2-bin apache2-common
sudo apt-get autoremove
whereis apache2
apache2: /etc/apache2 //列出路徑
sudo rm -rf /etc/apache2

nginx 502

查看錯誤日誌

sudo vi /var/log/nginx/error.log

connect() to unix:/var/run/php-fpm.sock failed (11: Resource temporarily unavailable)

如果是以上錯誤

sudo vi /etc/php/7.3/fpm/pool.d/www.conf

将backlog前面的;去掉,并将其值改为4096.

保存重启fpm

service php7.3-fpm restart

Nginx使用limit_req_zone對同一ip訪問進行限流

考慮到有可能的DDOS問題,又或是一些不正常的連線次數(在短時間大量call很多次api),可參考這兩篇文章修改nginx默認的連線設定:文章1文章2

想調整可以先進入設定檔:

vi /etc/nginx/sites-available/default

針對你想要加上限制的部分加上設定:

limit_req_zone $binary_remote_addr zone=reqlimit:10m rate=5r/s;server {
listen 80 default_server;
limit_req zone=reqlimit;
}
  • zone=reqlimit:自己定義的名稱
  • 10m:Server 記憶體要保存多少 ip 的 request 紀錄
  • rate=5r/s:每秒接受 5 個 requests

設定 no-cache 機制

有時網頁會 cache 到過去的資源,此時你可以在目標路徑下做如下設定

location / {
add_header Cache-Control no-cache;
add_header Cache-Control private;
try_files $uri $uri/ /index.html;
}
▶︎ 如果這篇文章有幫助到你1. 可以點擊下方「Follow」來追蹤我~
2. 可以對文章拍手讓我知道 👏🏻
你們的追蹤與鼓勵是我繼續寫作的動力 🙏🏼▶︎ 如果你對工程師的職涯感到迷茫1. 也許我在iT邦幫忙發表的系列文可以給你不一樣的觀點 💡
2. 也歡迎您到書局選購支持,透過豐富的案例來重新檢視自己的職涯

--

--

林鼎淵
Dean Lin

職涯中培育過多名工程師,🧰 目前在外商公司擔任 Software Specialist |✍️ 我專注寫 (1)最新技術 (2)團隊合作 (3)工程師職涯的文章,出版過 5 本專業書籍|👏🏻 如果對這些主題感興趣,歡迎點擊「Follow」來關注我~