一、Nginx中虚拟主机的配置

1、基于域名的虚拟主机配置

1、修改宿主机的hosts文件(系统盘/windows/system32/driver/etc/HOSTS)
linux : vim /etc/hosts
格式: ip地址 域名
eg: 192.168.3.172 www.gerry.com
2、在nginx.conf文件中配置server段

  1. server {
  2. listen 80;
  3. server_name www.gerry.com; # 域名区分
  4. location / {
  5. root html/gerry;
  6. index index.html;
  7. }
  8. }
  9. server {
  10. listen 80;
  11. server_name www.rm.com; # 域名区分
  12. location / {
  13. root html/rm;
  14. index index.html;
  15. }
  16. }

2. 基于端口号的虚拟主机配置

  1. 在nginx.conf文件中配置server端 ```bash server { listen 80; # 端口区分 location / {
    1. root html/gerry;
    2. index index.html;
    } }

server { listen 8080; # 端口区分 location / { root html/torey; # 需要在根目录创建文件夹和index.html文件才可以 index index.html; } }

  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1511608/1603378795720-a70a5555-d399-4a1b-b2c5-fa13e8bc5b3c.png#align=left&display=inline&height=102&margin=%5Bobject%20Object%5D&name=image.png&originHeight=102&originWidth=569&size=11859&status=done&style=none&width=569)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/1511608/1603378862467-052659ea-19ca-4337-9888-6f60378c38e3.png#align=left&display=inline&height=308&margin=%5Bobject%20Object%5D&name=image.png&originHeight=308&originWidth=583&size=23330&status=done&style=none&width=583)
  2. <a name="Wt1q6"></a>
  3. ## 3 修复中文乱码
  4. ```bash
  5. server {
  6. listen 8080;
  7. charset utf-8; # 中文编码
  8. location /{
  9. root torey/html;
  10. index index.html index.htm;
  11. }
  12. }

备注:需要执行 /usr/local/nginx/sbin/nginx -s reload,另外html页面也需要更改,有缓存
image.png

4 基于IP的虚拟主机配置

添加网卡的IP别名

  1. # 只要在这个ip段内就可以
  2. ifconfig ens33:1 192.168.3.202 broadcast 192.168.3.255 netmask 255.255.255.0 up
  1. route add -host 192.168.3.202 dev ens33:1
  1. ifconfig ens33:2 192.168.3.203 broadcast 192.168.3.255 netmask 255.255.255.0 up
  1. route add -host 192.168.3.203 dev ens33:2

从另外一台服务器Ping 192.168.3.202和192.168.3.203两个IP,如果能够Ping通,则证明配置无误。但是,通过ifconfig和route配置的IP别名在服 务器重启后会消失,不过可以将这两条ifconng和route命令添加到/etc/rc.local文件中,让系统开机时自动运行,以下是相关命令:vi /etc/rc.local在文件末尾增加以下内容,然后保存即可
ifconfig ens33:1 192.168.3.202 broadcast 192.168.3.255 netmask 255.255.255.0 uproute add -host 192.168.3.202 dev ens33:1ifconfig ens33:2 192.168.3.203 broadcast 192.168.3.255 netmask 255.255.255.0 uproute add -host 192.168.3.203 dev ens33:2

修改配置文件做如下的Server段配置

  1. server {
  2. listen 80;
  3. server_name 192.168.3.202;
  4. location / {
  5. root html/host1;
  6. index index.html;
  7. }
  8. }
  9. server {
  10. listen 80;
  11. server_name 192.168.3.203;
  12. location / {
  13. root html/host2;
  14. index index.html;
  15. }
  16. }

二、nginx中server_name的匹配顺序

前提:安装echo-nginx-module

echo-nginx-module:nginx中打印字符串的 模块
1、下载https://github.com/openresty/echo-nginx-module并解压到服务器上

image.png
image.png

2、进入nginx的安装目录,用下列命令进行配置和安装,(因为要加入新的模块,只能对nginx重新安装)
image.png

  1. ./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx_modules/echo-nginx-module-master

image.png
image.png

  1. make -j4 && make install

image.png
image.png

加入echo-nginx-module 和 —with-http_stub_status_module —with-http_ssl_module 命令

  1. ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/usr/local/nginx_modules/echo-nginx-module-master
  1. make -j4 && make install

1、最高优先级:完全匹配

首先,在nginx.conf中创建2个server,1个完全匹配,1个通配符匹配
通配符server放在最前,以证明完全匹配的优先级与配置顺序无关
需要在Hosts文件中做如下配置:
vim /etc/hosts
127.0.0.1 ddd.cn
127.0.0.1 aaa.cn

  1. server {
  2. listen 80;
  3. server_name *.cn;
  4. location / {
  5. default_type text/html;
  6. echo "通配符在前";
  7. }
  8. }
  9. server {
  10. listen 80;
  11. server_name ddd.cn;
  12. location / {
  13. default_type text/html;
  14. echo "完全匹配";
  15. }
  16. }

image.png

2、第二优先级:通配符在前

  1. server {
  2. listen 80;
  3. server_name ddd.*;
  4. location / {
  5. default_type text/html;
  6. echo "通配符在后";
  7. }
  8. }
  9. server {
  10. listen 80;
  11. server_name *.cn;
  12. location / {
  13. default_type text/html;
  14. echo "通配符在前";
  15. }
  16. }

image.png

3、第三优先级:通配符在后

  1. server {
  2. listen 80;
  3. server_name ~^\w+\.cn$;
  4. location / {
  5. default_type text/html;
  6. echo "正则匹配";
  7. }
  8. }
  9. server {
  10. listen 80;
  11. server_name ddd.*;
  12. location / {
  13. default_type text/html;
  14. echo "通配符在后";
  15. }
  16. }

4、listen配置项中default的影响

  1. server {
  2. listen 80;
  3. server_name ~^\w+\.cn$;
  4. location / {
  5. default_type text/html;
  6. echo "正则匹配";
  7. }
  8. }
  9. server {
  10. listen 80;
  11. server_name dddd.xxx;
  12. location / {
  13. default_type text/html;
  14. echo "不匹配";
  15. }
  16. }
  17. server {
  18. listen 80 default;
  19. server_name haha.xxx;
  20. location / {
  21. default_type text/html;
  22. echo "不匹配找Listen Default";
  23. }
  24. }

nginx常用命令

查看nginx是否启动

  1. ps -ef | grep nginx

image.png

[root@hecs-x-xlarge-2-linux-20200930155506 ~]# ps -ef | grep nginx
root 2006 1 0 Oct28 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 3220 2006 0 Oct28 ? 00:00:26 nginx: worker process
root 4684 4664 0 21:32 pts/3 00:00:00 grep —color=auto nginx
[root@hecs-x-xlarge-2-linux-20200930155506 ~]#

关闭nginx服务