中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟

發布時間:2020-04-14 18:41:59 來源:網絡 閱讀:386 作者:wx5d30212829a35 欄目:編程語言

下載

官方網站:https://nginx.org/en/download.html

Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟


Windows下安裝

安裝

下載后解壓(切記不能含有中文路徑!!),文件結構如圖(我解壓的路徑就有中文,記得拷貝放置于英文目錄下即可!):

Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟


啟動

兩種方法:

1) 直接雙擊該目錄下的"nginx.exe",即可啟動nginx服務器

2) 命令行進入該文件夾,執行start nginx命令,也會直接啟動nginx服務器。

驗證

開瀏覽器,輸入地址:http://localhost,訪問頁面,出現如下頁面表示訪問成功。

Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟


Nginx Windows基本操作指令

啟動服務:start?nginx
退出服務:nginx?-s?quit
強制關閉服務:nginx?-s?stop
重載服務:nginx?-s?reload  (重載服務配置文件,類似于重啟,服務不會中止)
驗證配置文件:nginx?-t
使用配置文件:nginx?-c?"配置文件路徑"
使用幫助:nginx?-h

Linux下安裝

申明:基于CentOS 7系統。

Nginx依賴包

模塊依賴性Nginx需要依賴下面3個包

  1. ssl功能需要 openssl 庫 ( 點擊下載 )

  2. gzip模塊需要 zlib 庫 ( 點擊下載 )

  3. rewrite模塊需要 pcre 庫 ( 點擊下載 )

依賴包安裝順序依次為:openssl、zlib、pcre, 最后安裝Nginx包。

安裝教程(源碼安裝)

step 1:下載所需包

openssl-fips-2.0.2.tar.gz
zlib-1.2.7.tar.gz
pcre-8.21.tar.gz
nginx-1.12.2.tar.gz

step 2:安裝OpenSSL

[root@localhost?wcw]#?tar?-zxvf?openssl-fips-2.0.2.tar.gz?
[root@localhost?wcw]#?cd?openssl-fips-2.0.2
[root@localhost?openssl-fips-2.0.2]#?./config?
[root@localhost?openssl-fips-2.0.2]#?make
[root@localhost?openssl-fips-2.0.2]#?make?install

step 3:安裝zlib

[root@localhost?wcw]#?tar?-zxvf?zlib-1.2.7.tar.gz
[root@localhost?wcw]#?cd?zlib-1.2.7
[root@localhost?zlib-1.2.7]#?./configure?
[root@localhost?zlib-1.2.7]#?make
[root@localhost?zlib-1.2.7]#?make?install

step 4:安裝pcre

[root@localhost?wcw]#?tar?-zxvf?pcre-8.21.tar.gz
[root@localhost?wcw]#?cd?pcre-8.21
[root@localhost?pcre-8.21]#?./configure?
[root@localhost?pcre-8.21]#?make
[root@localhost?pcre-8.21]#?make?install

step 5:安裝Nginx

[root@localhost?wcw]#?tar?-zxvf?nginx-1.12.2.tar.gz?
[root@localhost?wcw]#?cd?nginx-1.12.2
[root@localhost?nginx-1.12.2]#?./configure?--prefix=/usr/install/nginx?--with-pcre=../pcre-8.21?--with-zlib=../zlib-1.2.7?--with-openssl=../openssl-fips-2.0.2
[root@localhost?nginx-1.12.2]#?make
[root@localhost?nginx-1.12.2]#?make?install

請注意:"--with-xxx="的值是解壓目錄,而不是安裝目錄!

Nginx Linux基本操作指令

啟動服務:nginx
退出服務:nginx?-s?quit
強制關閉服務:nginx?-s?stop
重載服務:nginx?-s?reload  (重載服務配置文件,類似于重啟,但服務不會中止)
驗證配置文件:nginx?-t
使用配置文件:nginx?-c?"配置文件路徑"
使用幫助:nginx?-h

此時可以為Nginx添加環境變量,以便操作服務。(>>如何添加Linux環境變量?)

檢測是否安裝成功:

[root@localhost?wcw]#?nginx?-t

出現如下提示,表示安裝成功。

Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟


或者,在瀏覽器地址輸入"127.0.0.1"回車出現如下頁面,則表示安裝成功。

Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟


Nginx配置文件說明

在項目使用中,使用最多的三個核心功能是靜態服務器、反向代理和負載均衡

這三個不同的功能的使用,都跟Nginx的配置密切相關,Nginx服務器的配置信息主要集中在"nginx.conf"這個配置文件中,并且所有的可配置選項大致分為以下幾個部分.

main?#?全局配置

events?{?#?工作模式配置

}

http?{?#?http設置
?....

?server?{?#?服務器主機配置(虛擬主機、反向代理等)
?....
?location?{?#?路由配置(虛擬目錄等)
?....
?}

?location?path?{
?....
?}

?location?otherpath?{
?....
?}
?}

?server?{
?....

?location?{
?....
?}
?}

?upstream?name?{?#?負載均衡配置
?....
?}
}

main模塊

  • user 用來指定nginx worker進程運行用戶以及用戶組,默認nobody賬號運行

  • worker_processes 指定nginx要開啟的子進程數量,運行過程中監控每個進程消耗內存(一般幾M~幾十M不等)根據實際情況進行調整,通常數量是CPU內核數量的整數倍

  • error_log 定義錯誤日志文件的位置及輸出級別【debug / info / notice / warn / error / crit】

  • pid 用來指定進程id的存儲文件的位置

  • worker_rlimit_nofile 用于指定一個進程可以打開最多文件數量的描述

  • ...

event模塊

  • worker_connections 指定最大可以同時接收的連接數量,這里一定要注意,最大連接數量是和worker processes共同決定的。

  • multi_accept 配置指定nginx在收到一個新連接通知后盡可能多的接受更多的連接

  • use epoll 配置指定了線程輪詢的方法,如果是linux2.6+,使用epoll,如果是BSD如Mac請使用Kqueue

  • ...

http模塊

作為web服務器,http模塊是nginx最核心的一個模塊,配置項也是比較多的,項目中會設置到很多的實際業務場景,需要根據硬件信息進行適當的配置。

1)基礎配置

sendfile?on:配置on讓sendfile發揮作用,將文件的回寫過程交給數據緩沖去去完成,而不是放在應用中完成,這樣的話在性能提升有有好處
tcp_nopush?on:讓nginx在一個數據包中發送所有的頭文件,而不是一個一個單獨發
tcp_nodelay?on:讓nginx不要緩存數據,而是一段一段發送,如果數據的傳輸有實時性的要求的話可以配置它,發送完一小段數據就立刻能得到返回值,但是不要濫用哦

keepalive_timeout?10:給客戶端分配連接超時時間,服務器會在這個時間過后關閉連接。一般設置時間較短,可以讓nginx工作持續性更好
client_header_timeout?10:設置請求頭的超時時間
client_body_timeout?10:設置請求體的超時時間
send_timeout?10:指定客戶端響應超時時間,如果客戶端兩次操作間隔超過這個時間,服務器就會關閉這個鏈接

limit_conn_zone?$binary_remote_addr?zone=addr:5m?:設置用于保存各種key的共享內存的參數,
limit_conn?addr?100:?給定的key設置最大連接數

server_tokens:雖然不會讓nginx執行速度更快,但是可以在錯誤頁面關閉nginx版本提示,對于網站安全性的提升有好處哦
include?/etc/nginx/mime.types:指定在當前文件中包含另一個文件的指令
default_type?application/octet-stream:指定默認處理的文件類型可以是二進制
type_hash_max_size?2048:混淆數據,影響三列沖突率,值越大消耗內存越多,散列key沖突率會降低,檢索速度更快;值越小key,占用內存較少,沖突率越高,檢索速度變慢

2)日志配置

access_log?logs/access.log:設置存儲訪問記錄的日志
error_log?logs/error.log:設置存儲記錄錯誤發生的日志

3)SSL證書配置

ssl_protocols:指令用于啟動特定的加密協議,nginx在1.1.13和1.0.12版本后默認是ssl_protocols?SSLv3?TLSv1?TLSv1.1?TLSv1.2,TLSv1.1與TLSv1.2要確保OpenSSL?>=?1.0.1?,SSLv3?現在還有很多地方在用但有不少被***的漏洞。
ssl?prefer?server?ciphers:設置協商加密算法時,優先使用我們服務端的加密套件,而不是客戶端瀏覽器的加密套件

4)壓縮配置

gzip?是告訴nginx采用gzip壓縮的形式發送數據。這將會減少我們發送的數據量。
gzip_disable?為指定的客戶端禁用gzip功能。我們設置成IE6或者更低版本以使我們的方案能夠廣泛兼容。
gzip_static?告訴nginx在壓縮資源之前,先查找是否有預先gzip處理過的資源。這要求你預先壓縮你的文件(在這個例子中被注釋掉了),從而允許你使用最高壓縮比,這樣nginx就不用再壓縮這些文件了(想要更詳盡的gzip_static的信息,請點擊這里)。
gzip_proxied?允許或者禁止壓縮基于請求和響應的響應流。我們設置為any,意味著將會壓縮所有的請求。
gzip_min_length?設置對數據啟用壓縮的最少字節數。如果一個請求小于1000字節,我們最好不要壓縮它,因為壓縮這些小的數據會降低處理此請求的所有進程的速度。
gzip_comp_level?設置數據的壓縮等級。這個等級可以是1-9之間的任意數值,9是最慢但是壓縮比最大的。我們設置為4,這是一個比較折中的設置。
gzip_type?設置需要壓縮的數據格式。上面例子中已經有一些了,你也可以再添加更多的格式。

5)文件緩存配置

open_file_cache?打開緩存的同時也指定了緩存最大數目,以及緩存的時間。我們可以設置一個相對高的最大時間,這樣我們可以在它們不活動超過20秒后清除掉。
open_file_cache_valid?在open_file_cache中指定檢測正確信息的間隔時間。
open_file_cache_min_uses?定義了open_file_cache中指令參數不活動時間期間里最小的文件數。
open_file_cache_errors?指定了當搜索一個文件時是否緩存錯誤信息,也包括再次給配置中添加文件。我們也包括了服務器模塊,這些是在不同文件中定義的。如果你的服務器模塊不在這些位置,你就得修改這一行來指定正確的位置。

sever模塊

srever模塊配置是http模塊中的一個子模塊,用來定義一個虛擬訪問主機,也就是一個虛擬服務器的配置信息。

server?{
?listen?80;
?server_name?localhost?192.168.1.100;
?charset?utf-8;
?access_log?logs/access.log;
?error_log?logs/error.log;
?......
}
  • server:一個虛擬主機的配置,一個http中可以配置多個server

  • server_name:用來指定ip地址或者域名,多個配置之間用空格分隔

  • charset:用于設置www/路徑中配置的網頁的默認編碼格式

  • access_log:用于指定該虛擬主機服務器中的訪問記錄日志存放路徑

  • error_log:用于指定該虛擬主機服務器中訪問錯誤日志的存放路徑

location模塊

location模塊是Nginx配置中出現最多的一個配置,主要用于配置路由訪問信息。

在路由訪問信息配置中關聯到反向代理、負載均衡等等各項功能,所以location模塊也是一個非常重要的配置模塊。

1)基本配置

location?/?{
?root?/nginx/www;
?index?index.php?index.html?index.htm;
}
  • location /:表示匹配訪問根目錄

  • root:用于指定訪問根目錄時,訪問虛擬主機的web目錄

  • index:在不指定訪問具體資源時,默認展示的資源文件列表

2)反向代理配置

通過反向代理代理服務器訪問模式,通過proxy_set配置讓客戶端訪問透明化。

location?/?{
?proxy_pass?http://localhost:8888;
?proxy_set_header?X-real-ip?$remote_addr;
?proxy_set_header?Host?$http_host;
}

3)uwsgi配置

location?/?{
?include?uwsgi_params;
?uwsgi_pass?localhost:8888;
}

負載均衡模塊(upstream)

upstream模塊主要負責負載均衡的配置,通過默認的輪詢調度方式來分發請求到后端服務器。簡單的配置方式如下。

upstream?name?{
?ip_hash;
?server?192.168.1.100:8000?weight=9;
?server?192.168.1.100:8001?down;
?server?192.168.1.100:8002?max_fails=3;
?server?192.168.1.100:8003?fail_timeout=20s;
?server?192.168.1.100:8004?max_fails=3?fail_timeout=20s;
}
  • ip_hash:指定請求調度算法,默認是weight權重輪詢調度,可以指定

  • server host:port:分發服務器的列表配置

  • -- down:表示該主機暫停服務

  • -- max_fails:表示失敗最大次數,超過失敗最大次數暫停服務

  • -- fail_timeout:表示如果請求受理失敗,暫停指定的時間之后重新發起請求

Nginx主要配置

靜態Http服務器配置

首先,Nginx是一個HTTP服務器,可以將服務器上的靜態文件(如HTML、圖片)通過HTTP協議展現給客戶端。
配置:

server?{
?listen?80;?  #?端口
?server_name?localhost?192.168.1.100;?  #?域名?
?location?/?{             #?代表這是項目根目錄
?root?/usr/share/nginx/www;? ?#?虛擬目錄
?}
}

反向代理服務器配置

什么是反向代理?
客戶端本來可以直接通過HTTP協議訪問某網站應用服務器,如果網站管理員在中間加上一個Nginx,客戶端請求Nginx,Nginx請求應用服務器,然后將結果返回給客戶端,此時Nginx就是反向代理服務器。

Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟


反向代理配置:

server?{
?listen?80;
?location?/?{
?proxy_pass?http://192.168.0.112:8080;?  #?應用服務器HTTP地址
?}
}

既然服務器可以直接HTTP訪問,為什么要在中間加上一個反向代理,不是多此一舉嗎?反向代理有什么作用?繼續往下看,下面的負載均衡、虛擬主機,都基于反向代理實現,當然反向代理的功能也不僅僅是這些。

負載均衡配置

當網站訪問量非常大,也攤上事兒了。因為網站越來越慢,一臺服務器已經不夠用了。于是將相同的應用部署在多臺服務器上,將大量用戶的請求分配給多臺機器處理。同時帶來的好處是,其中一臺服務器萬一掛了,只要還有其他服務器正常運行,就不會影響用戶使用。Nginx可以通過反向代理來實現負載均衡。

Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟


負載均衡配置:

upstream?myapp?{
  ?ip_hash;  #?固定訪客
?server?192.168.0.111:8080?weight=9;?  #?應用服務器1
?server?192.168.0.112:8080?weight=1;?  #?應用服務器2
}

虛擬主機配置

有的網站訪問量大,需要負載均衡。然而并不是所有網站都如此出色,有的網站,由于訪問量太小,需要節省成本,將多個網站部署在同一臺服務器上。
例如將www.aaa.com和www.bbb.com兩個網站部署在同一臺服務器上,兩個域名解析到同一個IP地址,但是用戶通過兩個域名卻可以打開兩個完全不同的網站,互相不影響,就像訪問兩個服務器一樣,所以叫兩個虛擬主機。

虛擬主機配置:

server?{
?listen?80?default_server;
?server_name?_;
?return?444;?  #?過濾其他域名的請求,返回444狀態碼
}
server?{
?listen?80;
?server_name?www.aaa.com;?  #?www.aaa.com域名
?location?/?{
?proxy_pass?http://localhost:8080;?  #?對應端口號8080
?}
}
server?{
?listen?80;
?server_name?www.bbb.com;?  #?www.bbb.com域名
?location?/?{
?proxy_pass?http://localhost:8081;?  #?對應端口號8081
?}
}

在服務器8080和8081分別開了一個應用,客戶端通過不同的域名訪問,根據server_name可以反向代理到對應的應用服務器。

虛擬主機的原理是通過HTTP請求頭中的Host是否匹配server_name來實現的,有興趣的同學可以研究一下HTTP協議。

另外,server_name配置還可以過濾有人惡意將某些域名指向你的主機服務器。

Nginx開機啟動(方法1,適用CentOS7,systemctl管理服務)

CentOS7系統服務腳本目錄

用戶(user):用戶登錄后才能運行的程序,存在用戶(user)。

/usr/lib/systemd/user

系統(system):如需要開機沒有登陸情況下就能運行的程序,存在系統服務(system)里。

/usr/lib/systemd/system

編寫service腳本

服務文件名以.service結尾:

vim?/usr/lib/systemd/system/nginx.service

編寫腳本內容(固定格式):

[Unit]
Description=nginx
After=network.target
?
[Service]
Type=forking
PIDFile=/usr/install/nginx/logs/nginx.pid
ExecStart=/usr/install/nginx/sbin/nginx
ExecReload=/usr/install/nginx/sbin/nginx?-s?reload
ExecStop=/usr/install/nginx/sbin/nginx?-s?stop
PrivateTmp=true
?
[Install]
WantedBy=multi-user.target

以上路徑必須均為絕對路徑!!而ExecStart、ExecReload、ExecStop的值也可以是"/etc/init.d"下的自定義的sh腳本文件的絕對路徑,我就是采用這種方式來實現?uWSGI?開機啟動的:

/etc/init.d目錄下新建uWSGI服務啟動腳本文件"uwsgi-start.sh":

#!/bin/sh
/pyvenv/bin/uwsgi?--ini?/pyvenv/src/eduonline/uwsgi.ini;
/etc/init.d目錄下新建uWSGI服務重啟腳本文件"uwsgi-restart.sh":

#!/bin/sh
/pyvenv/bin/uwsgi?--restart?/pyvenv/src/eduonline/uwsgi.pid;
/etc/init.d目錄下新建uWSGI服務停止腳本文件"uwsgi-stop.sh":

#!/bin/sh
/pyvenv/bin/uwsgi?--stop?/pyvenv/src/eduonline/uwsgi.pid;

注意:sh腳本中同樣采用絕對路徑!!保存后,賦予可讀可執行權限。然后編寫service腳本文件。

設置開機啟動(強大的CentOS服務管理工具systemctl)

systemctl?enable?nginx.service?#".service"可省略

#?附其他命令:
systemctl?start?nginx.service?#?啟動
systemctl?restart?nginx.service?#?重啟,服務會中止一會兒
systemctl?reload?nginx.service   ?#?重載服務配置文件,類似于重啟,但服務不會中止
systemctl?stop?nginx.service?#?停止
systemctl?disable?nginx.service?#?關閉開機啟動

如果提示"Failed to execute operation: Access denied",輸入"systemctl daemon-reexec"可解決。

Nginx開機啟動(方法2,適用CentOS7以下)

首先,在Linux系統的"/etc/init.d/"目錄下創建nginx腳本文件,使用如下命令:

touch?nginx?#?創建
vim?nginx?#?編輯

在腳本中添加如下命令:

#!/bin/sh
#
#?nginx?-?this?script?starts?and?stops?the?nginx?daemon
#
#?chkconfig:?-?85?15
#?description:?NGINX?is?an?HTTP(S)?server,?HTTP(S)?reverse?\
#?proxy?and?IMAP/POP3?proxy?server
#?processname:?nginx
#?config:?/etc/nginx/nginx.conf
#?config:?/etc/sysconfig/nginx
#?pidfile:?/var/run/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/sbin/nginx"?#?修改可執行文件路徑
prog=$(basename?$nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"?#?修改配置文件路徑

[?-f?/etc/sysconfig/nginx?]?&&?.?/etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs()?{
?#?make?required?directories
?user=`$nginx?-V?2>&1?|?grep?"configure?arguments:.*--user="?|?sed?'s/[^*]*--user=\([^?]*\).*/\1/g'?-`
?if?[?-n?"$user"?];?then
?if?[?-z?"`grep?$user?/etc/passwd`"?];?then
?useradd?-M?-s?/bin/nologin?$user
?fi
?options=`$nginx?-V?2>&1?|?grep?'configure?arguments:'`
?for?opt?in?$options;?do
?if?[?`echo?$opt?|?grep?'.*-temp-path'`?];?then
?value=`echo?$opt?|?cut?-d?"="?-f?2`
?if?[?!?-d?"$value"?];?then
?#?echo?"creating"?$value
?mkdir?-p?$value?&&?chown?-R?$user?$value
?fi
?fi
?done
?fi
}

start()?{
?[?-x?$nginx?]?||?exit?5
?[?-f?$NGINX_CONF_FILE?]?||?exit?6
?make_dirs
?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
?sleep?1
?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

保存腳本文件后對所有用戶追加可執行權限:

chmod?a+x?/etc/init.d/nginx

先將nginx服務加入chkconfig管理列表:

chkconfig?--add?/etc/init.d/nginx

設置終端模式開機啟動:

chkconfig?nginx?on


讀者福利

加微信:haolagui521備注51CTO領取附送學習進階架構資料、PDF書籍文檔、面試資料

Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟

Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟


Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟Nginx 安裝與部署配置以及Nginx和uWSGI開機自啟


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴海县| 普兰店市| 武定县| 长岭县| 五原县| 二手房| 尖扎县| 乌什县| 木兰县| 周至县| 尉氏县| 湘西| 宜兴市| 龙岩市| 垫江县| 玉屏| 高陵县| 筠连县| 嘉黎县| 平塘县| 泸州市| 余干县| 象山县| 民和| 将乐县| 白山市| 鄯善县| 封丘县| 太仓市| 丹寨县| 平泉县| 中江县| 泰来县| 定远县| 双桥区| 道真| 靖江市| 隆安县| 横山县| 区。| 石嘴山市|