Nginx是一款輕量級的HTTP服務器,採用事件驅動的異步非阻塞處理方式框架,這讓其具備極好的IO性能。咱們在平常開發中使用到Nginx的主要有如下幾個場景:
css
Nginx自己是一個靜態資源的服務器,當只有靜態資源的時候,就可使用Nginx來作服務器,以下,咱們使用Nginx來部署一個打包好的vue項目
html
#vue項目
server
{
listen 8081; #監聽端口
server_name 209.250.235.145;
root /app/vue/dist/; # 咱們的資源在服務器中的路徑
index index.html; #指定資源的入口文件
}複製代碼
完成後咱們nginx -s reload一下,而後訪問209.250.235.145:8081,只要路徑沒錯靜態資源就訪問的到了vue
#跨域請求server
server{
listen 9000;
server_name 209.250.235.145;
root /app/crossDomain/;
index index.html;
location /douban/ { #添加訪問目錄爲/apis的代理配置
rewrite ^/douban/(.*)$ /$1 break;
proxy_pass https://m.douban.com;
}
}
複製代碼
在個人服務器下我寫了一個node
function nginxClick(){
$.ajax({
url: '/douban/rexxar/api/v2/muzzy/columns/10018/items?start=0&count=3',
dataType: 'json',
type: 'get',
data: "",
success:(res)=>{
console.log(res)
}
})
}
複製代碼
當咱們訪問點擊請求時,匹配到location下的/douban/nginx
rewrite ^/douban/(.*)$ /$1 break;複製代碼
這段配置將請求路徑重寫爲/rexxar/api/v2/muzzy/columns/10018/items?start=0&count=3,其中$1表明正則模糊匹配到的第一個參數,web
proxy_pass https://m.douban.com;複製代碼
這段配置是將請求域名代理到豆瓣的域名下面,因此從本地服務器發出去的請求將被從新重寫爲:ajax
https://m.douban.com/rexxar/api/v2/muzzy/columns/10018/items?start=0&count=3,咱們就能拿到豆瓣api提供的數據。詳情能夠看看這篇文章
json
演示地址:http://209.250.235.145:9000/後端
負載均衡也是Nginx經常使用的一個功能,主要的是利用upstream來定義集羣服務器。負載均衡配置通常都須要同時配置反向代理,經過反向代理跳轉到負載均衡。而Nginx目前支持自帶3種負載均衡策略api
使用upstream定義服務器
upstream smile.com{
server 209.250.235.145:9001 weight=1;
server 209.250.235.145:9002 weight=2;
}複製代碼
server{
listen 9003;
server_name 209.250.235.145;
location / {
proxy_pass http://smile.com;
proxy_redirect default;
}
}複製代碼
當咱們訪問9003這個端口時,會根據咱們設置的權重不一樣分別落在不一樣的服務器(端口)。
演示地址:http://209.250.235.145:9003/
當咱們的請求涉及靜態資源時,咱們能夠將請求分發到不一樣的服務器。
#動靜分離server
upstream static {
server 209.250.235.145:9006;
}
server{
listen 9005;
server_name 209.250.235.145;
root /app/dynSta;
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
proxy_pass http://static;
}
}
server{
listen 9006;
server_name 209.250.235.145;
root /app/dynSta;
}
複製代碼
咱們定義了一個
nginx除了以上的使用場景外,還能夠用來適配pc和移動環境
#適配pc環境和移動環境
server{
listen 9007;
server_name 209.250.235.145;
root /app/pcAndh5/;
index pc.html;
location / {
if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
set $mobile_request '1';
}
if ($mobile_request = '1') {
rewrite ^.+ https://www.baidu.com/;
}
}
}
複製代碼
這裏咱們使用nginx內置變量$http_user_agent來匹配請求的來源,當來源是(Android|webOS|iPhone|iPod|BlackBerry)時,咱們將請求整個重寫,讓他去訪問百度,不然訪問我服務器的地址。
演示地址:http://209.250.235.145:9007/
以上就是nginx服務器在咱們平常開發中使用到的場景