Linux下Nginx+多Tomcat負(fù)載均衡實(shí)現(xiàn)詳解

姓名:鄭紅????????????????????????????????? 學(xué)號(hào):17101223385

本文轉(zhuǎn)自http://server.51cto.com/sOS-560862.htm

【嵌牛導(dǎo)讀】:Nginx作為反向代理服務(wù)器,實(shí)現(xiàn)負(fù)載均衡。首先瀏覽器發(fā)起請(qǐng)求,到達(dá)Nginx,由Nginx將請(qǐng)求地址轉(zhuǎn)發(fā)給相應(yīng)的tomcat服務(wù)器,再由tomcat服務(wù)器將結(jié)果返回給Nginx,Nginx將結(jié)果再轉(zhuǎn)發(fā)給瀏覽器。

【嵌牛鼻子】:Linux??? Nginx ? ? ?Tomcat

【嵌牛提問(wèn)】:什么是Nginx?

【嵌牛正文】:

一、簡(jiǎn)介

【Nginx】 大名鼎鼎,麻雀雖小五臟俱全,它擁有小而穩(wěn)且高效的特性。為目前大多數(shù)中小企業(yè)所使用。nginx可以做以下幾件事:

反向代理

負(fù)載均衡

動(dòng)靜分離

網(wǎng)頁(yè)、圖片緩存

【Tomcat】 是一個(gè)免費(fèi)開(kāi)放源代碼的 Web 應(yīng)用服務(wù)器,具有開(kāi)源免費(fèi)、容易安裝、 容易使 用、占用資源小、易于和其他軟件集成等優(yōu)點(diǎn)。

Tomcat 很受廣大程序員的喜歡,因?yàn)樗\(yùn)行時(shí)占用的系統(tǒng)資源小,擴(kuò)展性好,支持負(fù)載

平衡與郵件服務(wù)等開(kāi)發(fā)應(yīng)用系統(tǒng)常用的功能;而且它還在不斷的改進(jìn)和完善中,任何一個(gè)感 興趣的程序員都可以更改它或在其中加入新的功能。

【N+T的負(fù)載均衡】

然而他們的組合將是一把無(wú)與倫比的利刃。首先說(shuō)明一下它的請(qǐng)求原理(路徑走向)

Nginx作為反向代理服務(wù)器,實(shí)現(xiàn)負(fù)載均衡。首先瀏覽器發(fā)起請(qǐng)求,到達(dá)Nginx,由Nginx將請(qǐng)求地址轉(zhuǎn)發(fā)給相應(yīng)的tomcat服務(wù)器,再由tomcat服務(wù)器將結(jié)果返回給Nginx,Nginx將結(jié)果再轉(zhuǎn)發(fā)給瀏覽器。

下面上圖:

圖中的信息顯而易見(jiàn),以nginx服務(wù)器作為中轉(zhuǎn)分發(fā)請(qǐng)求,以達(dá)到負(fù)載均衡的目的。

二、環(huán)境需求

【由于博主的主機(jī)(臉紅~)配置低,所以只開(kāi)一開(kāi)虛擬機(jī)作為這次負(fù)載均衡的測(cè)試。一個(gè)ip三個(gè)端口既可實(shí)現(xiàn)上圖所述的效果了】

主機(jī)A:192.168.0.144/24

apache-tomcat-6.0.35.tar.gz ? tomcat 6 ?使用的主要端口:18080

apache-tomcat-7.0.82.tar.gz ? tomcat 7 ?使用的主要端口:28080

apache-tomcat-8.5.23.tar.gz ? tomcat 8 ?使用的主要端口: 8088

nginx-1.0.12.tar.gz

jdk7u79linuxx64.tar.gz

(其他一些基礎(chǔ)環(huán)境比如gcc-c++的自己補(bǔ)全吧)

三、各個(gè)環(huán)境的搭建

3.1 Nginx搭建

先把所有準(zhǔn)備好的軟件工具放到一個(gè)目錄下(都先準(zhǔn)備好必用軟件,不然配置起來(lái)才去找軟件是很煩人的)

[root@N+T?lhl]#?ll

total?175172

-rw-r--r--?1?root?root???9472492?Dec??1??2017?apache-tomcat-8.5.23.tar.gz

-rw-r--r--?1?root?root?153512879?Dec??7??2017?jdk7u79linuxx64.tar.gz

-rw-r--r--?1?root?root????691002?May??9??2012?nginx-1.0.12.tar.gz

-rw-r--r--?1?root?root??15692490?Nov?29??2017?Tomcat6-7.zip

接下來(lái)安裝一下開(kāi)發(fā)環(huán)境

[root@N+T?lhl]#?yum?-y?install?gcc?gcc-c++

在/usr目錄下面創(chuàng)建一個(gè)nginx的目錄,并把nginx包移動(dòng)到該目錄下,再解壓到該目錄下面

[root@N+T?lhl]#?mkdir?-p?/usr/nginx

[root@N+T?lhl]#?mv?nginx-1.0.12.tar.gz?/usr/nginx/?&&cd?/usr/nginx/&&tar?-zxvf?nginx-1.0.12.tar.gz

最好進(jìn)入nginx-1.0.12目錄,再編譯安裝

[root@N+T?nginx-1.0.12]#?./configure?&&make?&&make?install

一般編譯安裝都默認(rèn)在/usr/local/nginx/ 目錄下面 ,下面這個(gè)就是nginx的主程序。

[root@N+T?sbin]#?ll?/usr/local/nginx/sbin/nginx

-rwxr-xr-x?1?root?root?954836?Aug?16?04:43?/usr/local/nginx/sbin/nginx

本博文為了搭建的方便直接把這個(gè)主程序拉倒/usr/bin/ 目錄下了

[root@N+T?sbin]#?cp?-a?/usr/local/nginx/sbin/nginx?/usr/bin/

下面是配置文件

[root@N+T?sbin]#?ll?/usr/local/nginx/conf/nginx.conf

簡(jiǎn)單的配置了一下配置文件

#####nginx+3?T?負(fù)載均衡測(cè)試############

#####最簡(jiǎn)化的配置文件了--###############

usernobody;???#對(duì)于用戶有安全性限制的伙伴可以創(chuàng)建一個(gè)賬戶去使用

worker_processes?1;

events?{

use?epoll;

worker_connections??1024;

}

http

{

include???????mime.types;

default_type??application/octet-stream;

sendfileon;

keepalive_timeout??60;?#簡(jiǎn)單文本顯示格式編輯

fastcgi_connect_timeout?300;

fastcgi_send_timeout?300;

fastcgi_read_timeout?300;

fastcgi_buffer_size?64k;

fastcgi_buffers?8?128k;

fastcgi_busy_buffers_size?128k;

fastcgi_temp_file_write_size?128k;

fastcgi_temp_path?/dev/shm;

server{

listen???????80;

server_name??localhost;

access_log?/var/log/nginx/aeecss.log;

error_log??/var/log/nginx/error.log;

location?/?{

proxy_pass??http://li7105.com;

proxy_redirectdefault;

}

}

}

下面運(yùn)行nginx,查看信息

[root@N+T?sbin]#?/usr/bin/nginx?-c?/usr/local/nginx/conf/nginx.conf

[root@N+T?sbin]#?ps?-ef?|?grep?nginx

root???????1561??????1??0?13:04??????????00:00:00?nginx:?master?process?/usr/bin/nginx?-c?/usr/local/nginx/conf/nginx.conf

www????????1562???1561??0?13:04??????????00:00:00?nginx:?worker?process

root???????1709???1573??0?18:49?pts/1????00:00:00?grep--color?nginx

注意:nginx沒(méi)有啟動(dòng)起來(lái),麻煩去認(rèn)真的檢查一下nginx配置文件。

PS:開(kāi)機(jī)機(jī)動(dòng)啟動(dòng)的話,直接把啟動(dòng)代碼丟進(jìn)rc.local這個(gè)文件里面即可。

[root@N+T?lhl]#?echo"/usr/bin/nginx??-c?/usr/local/nginx/conf/nginx.conf">>?/etc/rc.d/rc.local

nginx的基本部署完成!

3.2 Tomcat 的搭建

由于tomcat依賴(lài)于jdk環(huán)境下運(yùn)行,所以先搭建jdk環(huán)境,配置變量環(huán)境

[root@N+T?lhl]#?mkdir?/usr/java/

[root@N+T?lhl]#?mv?jdk7u79linuxx64.tar.gz?/usr/java/?&&?cd?/usr/java/?&&?tar?-zxvf?jdk7u79linuxx64.tar.gz

[root@N+T?java]#?ll

total?4

drwxr-xr-x?8?uucp?143?4096?Apr?11??2015?jdk1.7.0_79

[root@N+T?java]#?cd?jdk1.7.0_79/

[root@N+T?jdk1.7.0_79]#?pwd??#看清楚路徑

/usr/java/jdk1.7.0_79

[root@N+T?jdk1.7.0_79]#

PS:關(guān)于軟件依賴(lài)的變量環(huán)境

就目前來(lái)去為一個(gè)軟件或者環(huán)境的運(yùn)行去搭建變量環(huán)境主要用下面三種方法

1、在/etc/profile下配置,這屬于大環(huán)境的配置了。不過(guò)管理上不靈活,屬于點(diǎn)到面的管理(本博文由于只有這個(gè)tomcat用到,所以在這配置了)

2、在/etc/profile.d/目錄下面創(chuàng)建一個(gè)專(zhuān)屬的變量環(huán)境如:tomcat.sh ?在里面指的變量路徑以及文件路徑,這種方式管理很靈活,屬于點(diǎn)到點(diǎn)的管理。

3、在軟件的某個(gè)文本下面去直接添加指定的變量環(huán)境,如tomcat的。

[root@N+T?bin]#?pwd

/usr/tomcatG/tomcat6/bin

[root@N+T?bin]#?ll

total?612

-rw-r--r--?1?root?root??22705?Nov?28??2011?bootstrap.jar

-rw-r--r--?1?root?root??11830?Nov?28??2011?catalina.bat

-rwxr-xr-x?1?root?root??17708?Nov?28??2011?catalina.sh

-rw-r--r--?1?root?root???2374?Nov?28??2011?catalina-tasks.xml

-rw-r--r--?1?root?root??24172?Nov?28??2011?commons-daemon.jar

-rw-r--r--?1?root?root?199623?Nov?28??2011?commons-daemon-native.tar.gz

-rw-r--r--?1?root?root???1342?Nov?28??2011?cpappend.bat

-rw-r--r--?1?root?root???2108?Nov?28??2011?digest.bat

-rwxr-xr-x?1?root?root???1689?Nov?28??2011?digest.sh

-rw-r--r--?1?root?root???3150?Nov?28??2011?setclasspath.bat

-rwxr-xr-x?1?root?root???4153?Aug?16?10:57?setclasspath.sh?###在這個(gè)文件里面指定變量環(huán)境

-rw-r--r--?1?root?root???2108?Nov?28??2011?shutdown.bat

-rwxr-xr-x?1?root?root???1628?Nov?28??2011?shutdown.sh

-rw-r--r--?1?root?root???2109?Nov?28??2011?startup.bat

-rwxr-xr-x?1?root?root???2023?Nov?28??2011?startup.sh

-rw-r--r--?1?root?root??32277?Nov?28??2011?tomcat-juli.jar

-rw-r--r--?1?root?root?249259?Nov?28??2011?tomcat-native.tar.gz

-rw-r--r--?1?root?root???3479?Nov?28??2011?tool-wrapper.bat

-rwxr-xr-x?1?root?root???3472?Nov?28??2011?tool-wrapper.sh

-rw-r--r--?1?root?root???2113?Nov?28??2011?version.bat

-rwxr-xr-x?1?root?root???1632?Nov?28??2011?version.sh

[root@N+T?bin]#

setclasspath.sh ?里面指定。軟件的不同在不同的文件指定吧,這個(gè)可以在度娘查到。第三種辦法一般很少用到。

繼續(xù)!下面在/etc/profile下配置變量環(huán)境

export?JAVA_HOME=/usr/java/jdk1.7.0_79/??#路徑別弄錯(cuò)

export?JAVA_BIN=$JAVA_HOME/bin

export?PATH=$PATH:$JAVA_HOME/bin

export?CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

最后直接執(zhí)行,使得文件profile生效

[root@N+T?/]#?source?/etc/profile

接著執(zhí)行 java -version ?命令即可看到對(duì)應(yīng)的版本號(hào),說(shuō)明已經(jīng)生效了。(在這里有些小伙伴會(huì)時(shí)常出現(xiàn)一個(gè)問(wèn)題,明明tomcat已經(jīng)實(shí)在用這個(gè)

jdk版本了,可是輸入命令java -version

顯示出來(lái)的卻不是目前tomcat在用的jdk版本,這時(shí)候該注意一下查看tomcat下面的comment目錄下的jdk版本是否對(duì)應(yīng)的,不是的話。就把jdk下的替換過(guò)去,另外我還有尋找另外一種解決辦法,希望各位賜教。)

jdk部署完畢!

3.3 tomcat 的搭建

在/usr 下創(chuàng)建tomcatG 的目錄,并且把三個(gè)版本的tomcat拉到目錄下分別改名為tomcat6、tomcat7、tomcat8。最后分別解壓,再修改server.xml ?文檔的端口

[root@N+T?tomcatG]#?ll

total?12

drwxr-xr-x?9?root?root?4096?Aug?16?10:27?tomcat6

drwxr-xr-x?9?root?root?4096?Aug?16?10:49?tomcat7

drwxr-xr-x?9?root?root?4096?Aug?16?11:11?tomcat8

[root@N+T?tomcatG]#

下面修改tomcat6的server.xml文件:三處地方

1、

connectionTimeout="20000"

redirectPort="8443"/>

2、

3、

剩下的tomcat7和tomcat8以此類(lèi)推!

下面啟動(dòng)tomcat6-8

啟動(dòng)tomcat6:

[root@N+T?bin]#?pwd

/usr/tomcatG/tomcat6/bin

[root@N+T?bin]#?ll

total?612

-rw-r--r--?1?root?root??22705?Nov?28??2011?bootstrap.jar

-rw-r--r--?1?root?root??11830?Nov?28??2011?catalina.bat

-rwxr-xr-x?1?root?root??17708?Nov?28??2011?catalina.sh

-rw-r--r--?1?root?root???2374?Nov?28??2011?catalina-tasks.xml

-rw-r--r--?1?root?root??24172?Nov?28??2011?commons-daemon.jar

-rw-r--r--?1?root?root?199623?Nov?28??2011?commons-daemon-native.tar.gz

-rw-r--r--?1?root?root???1342?Nov?28??2011?cpappend.bat

-rw-r--r--?1?root?root???2108?Nov?28??2011?digest.bat

-rwxr-xr-x?1?root?root???1689?Nov?28??2011?digest.sh

-rw-r--r--?1?root?root???3150?Nov?28??2011?setclasspath.bat

-rwxr-xr-x?1?root?root???4153?Aug?16?10:57?setclasspath.sh

-rw-r--r--?1?root?root???2108?Nov?28??2011?shutdown.bat

-rwxr-xr-x?1?root?root???1628?Nov?28??2011?shutdown.sh??#這是停止

-rw-r--r--?1?root?root???2109?Nov?28??2011?startup.bat

-rwxr-xr-x?1?root?root???2023?Nov?28??2011?startup.sh??#啟動(dòng)

-rw-r--r--?1?root?root??32277?Nov?28??2011?tomcat-juli.jar

-rw-r--r--?1?root?root?249259?Nov?28??2011?tomcat-native.tar.gz

-rw-r--r--?1?root?root???3479?Nov?28??2011?tool-wrapper.bat

-rwxr-xr-x?1?root?root???3472?Nov?28??2011?tool-wrapper.sh

-rw-r--r--?1?root?root???2113?Nov?28??2011?version.bat

-rwxr-xr-x?1?root?root???1632?Nov?28??2011?version.sh

[root@N+T?bin]#?./startup.sh

如圖所示!

tomcat 7-8以此類(lèi)推!

再看一下三個(gè)tomcat啟動(dòng)的進(jìn)程。

[root@N+T?bin]#?ps?-ef?|grep?tomcat

root???????1278??????1??0?13:50??????????00:00:10?/usr/java/jdk1.7.0_79/bin/java?-Djava.util.logging.config.file=/usr/tomcatG/tomcat7/conf/logging.properties?-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager?-Djdk.tls.ephemeralDHKeySize=2048?-Djava.endorsed.dirs=/usr/tomcatG/tomcat7/endorsed?-classpath?/usr/tomcatG/tomcat7/bin/bootstrap.jar:/usr/tomcatG/tomcat7/bin/tomcat-juli.jar?-Dcatalina.base=/usr/tomcatG/tomcat7?-Dcatalina.home=/usr/tomcatG/tomcat7?-Djava.io.tmpdir=/usr/tomcatG/tomcat7/temporg.apache.catalina.startup.Bootstrap?start?start

root???????1287??????1??0?13:50??????????00:00:13?/usr/java/jdk1.7.0_79/bin/java?-Djava.util.logging.config.file=/usr/tomcatG/tomcat8/conf/logging.properties?-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager?-Djdk.tls.ephemeralDHKeySize=2048?-Djava.protocol.handler.pkgs=org.apache.catalina.webresources?-classpath?/usr/tomcatG/tomcat8/bin/bootstrap.jar:/usr/tomcatG/tomcat8/bin/tomcat-juli.jar?-Dcatalina.base=/usr/tomcatG/tomcat8?-Dcatalina.home=/usr/tomcatG/tomcat8?-Djava.io.tmpdir=/usr/tomcatG/tomcat8/temporg.apache.catalina.startup.Bootstrap?start?start

root???????1301??????1??0?13:50??????????00:00:08?/usr/java/jdk1.7.0_79/jre/bin/java?-Djava.util.logging.config.file=/usr/tomcatG/tomcat6//conf/logging.properties?-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager?-Djava.endorsed.dirs=/usr/tomcatG/tomcat6//endorsed?-classpath?/usr/tomcatG/tomcat6//bin/bootstrap.jar?-Dcatalina.base=/usr/tomcatG/tomcat6/?-Dcatalina.home=/usr/tomcatG/tomcat6/?-Djava.io.tmpdir=/usr/tomcatG/tomcat6//temporg.apache.catalina.startup.Bootstrap?start

root???????1509???1418??0?15:02?pts/0????00:00:00?grep--color?tomcat

[root@N+T?bin]#

可以看到,各個(gè)端口以及運(yùn)行的變量環(huán)境(jdk)這個(gè)排版比較長(zhǎng),需要往后面拉取才能看到所有內(nèi)容。

3.4 配置負(fù)載均衡

在nginx里面添加幾條代碼即可,下面請(qǐng)看

#####nginx+3?T?負(fù)載均衡測(cè)試############

usernobody;

worker_processes?1;

events?{

use?epoll;

worker_connections??1024;

}

http

{

include???????mime.types;

default_type??application/octet-stream;

sendfileon;

keepalive_timeout??60;

fastcgi_connect_timeout?300;

fastcgi_send_timeout?300;

fastcgi_read_timeout?300;

fastcgi_buffer_size?64k;

fastcgi_buffers?8?128k;

fastcgi_busy_buffers_size?128k;

fastcgi_temp_file_write_size?128k;

fastcgi_temp_path?/dev/shm;

upstream?li7105.com?{??????????????#在此插入

server?127.0.0.1:18080?weight=1;???#tomcat6分流????weight=1??這是權(quán)重分配。

server?127.0.0.1:28080?weight=2;???#tomcat7分流????weight=2?顯然2更大,那么它被分配任務(wù)的幾率也就更大

server?127.0.0.1:8088?weight=2;????#tomcat8分流

}

server{

listen???????80;

server_name??localhost;

access_log?/var/log/nginx/aeecss.log;

error_log??/var/log/nginx/error.log;

location?/?{

proxy_pass??http://li7105.com;

proxy_redirectdefault;

}

}

}

【關(guān)于nginx的負(fù)載均衡的分配方式】

nginx關(guān)于這個(gè)負(fù)載均衡方面的權(quán)重分配方式有4種:

1.輪詢,默認(rèn)采取此方式,Nginx會(huì)按照請(qǐng)求時(shí)間的先后順序進(jìn)行輪詢分發(fā),若某臺(tái)Web Server宕機(jī),Nginx自動(dòng)將其摘掉。

2.weight,權(quán)重,即輪詢的幾率,值越大,被分發(fā)的可能性越大,用于后端服務(wù)器性能不均的情況。

3. ip_hash ,每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決共享session的問(wèn)題。

4.自定義規(guī)則

PS:

down 表示當(dāng)前的Web Server暫時(shí)不參與負(fù)載

weight 默認(rèn)為1.weight越大,負(fù)載的權(quán)重就越大。

backup: 其它所有的非backup Server down或者忙的時(shí)候,請(qǐng)求backup機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕。

四、負(fù)載均衡的測(cè)試

為了是的測(cè)試的效果明了些,我把/usr/tomcatG/tomcat6/webapps/ROOT 目錄下的index.jsp 文件的內(nèi)容全部刪除掉,直接改為tomcat6 ,7-8一樣如此。

[root@N+T?ROOT]#?catindex.jsp

I?am?Tomcat?6666666666666!

在測(cè)試之前需要檢查一下,下面幾個(gè)個(gè)問(wèn)題。確保沒(méi)問(wèn)題了,就去測(cè)試,不然返回來(lái)做無(wú)用功了。

1、nginx、tomcat、jdk正在運(yùn)行

2、網(wǎng)頁(yè)上能夠哦正常訪問(wèn)nginx 和 ?tomcat

3、防火墻

我就在本地主機(jī)上面的瀏覽器測(cè)試吧,因?yàn)楦锢頇C(jī)是連通的。

在瀏覽器輸入:http://192.168.0.144/index.jsp ?然后不停按F5刷新網(wǎng)頁(yè),接著網(wǎng)頁(yè)會(huì)不停的在tomcat6、tomcat7、tomcat8的內(nèi)容標(biāo)識(shí)上面做跳轉(zhuǎn),顯示的內(nèi)容也會(huì)不一樣。

如圖:

不停的刷新,看著頁(yè)面的變化。你會(huì)發(fā)現(xiàn)權(quán)重等于1的tomcat6出現(xiàn)的次數(shù)會(huì)比tomcat7和tomcat8的次數(shù)很多的。

上面只是個(gè)簡(jiǎn)單的測(cè)試,有興趣的伙伴可以添加去修改這個(gè)jsp文檔,哈哈。

上述圖片說(shuō)明了nginx的負(fù)載均衡是正在運(yùn)行中的了。測(cè)試完畢!

五、總結(jié)

在搭建這個(gè)環(huán)境需要注意的幾點(diǎn):

1、tomcat的端口,由于是在一臺(tái)機(jī)器上面部署3個(gè)tomcat,所以改的端口就有9個(gè)了。主機(jī)端口的范圍,超出范圍不然tomcat是無(wú)法啟動(dòng)的

2、jdk變量環(huán)境的搭建,注意路徑。

3、nginx 配置文檔的參數(shù)、模塊注意編寫(xiě)。不然無(wú)法啟動(dòng)

4、注意防火墻設(shè)置,對(duì)于需求安全性的伙伴們。當(dāng)然測(cè)試你可以完全的關(guān)閉掉。

nginx和tomcat的負(fù)載均衡,基本配置完畢,這類(lèi)型的負(fù)載均衡目前在很多的企業(yè)被使用。然而這僅僅是企業(yè)網(wǎng)絡(luò)架構(gòu)中的一個(gè)小小的部分,我期待后面能夠給大家講述更多關(guān)于這方面的知識(shí)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容