5.nginx的安装及实现基于域名的PC端和移动端

安装

Nginx的安装版本分为Mainline version(主要开发版本,其实就是还处于开发版)、Stable version(当前最新稳定版)和Legacy versions(旧的稳定版), Nginx安装可以使⽤yum或源码安装,但是推荐使⽤源码,⼀是yum的版本⽐较旧,⼆是编译安装可以更⽅便⾃定义相关路径,三是使⽤源码编译可以⾃定义相关功能,更⽅便业务的上的使⽤,源码安装需要提前准备标准的编译器,GCC的全称是(GNU Compiler collection),其有GNU开发,并以GPL即LGPL许可,是⾃由的类UNIX即苹果电脑Mac OS X操作系统的标准编译器,因为GCC原本只能处理C语⾔,所以原名为GNU C语⾔编译器,后来得到快速发展,可以处理C++,Fortran,pascal,objective-C,java以及Ada等其他语⾔,此外还需要Automake⼯具,以完成⾃动创建Makefile的⼯作,Nginx的⼀些模块需要依赖第三⽅库,⽐如pcre(⽀持rewrite),zlib(⽀持gzip模块)和openssl(⽀持ssl模块)等。

安装依赖包

sudo apt install curl gnupg2 ca-certificates lsb-release

下载软件包并解压

wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -xf nginx-1.18.0.tar.gz

编译安装

编译通常使用以下参数,如果想了解更多参数使用./configure --help查看

cd nginx-1.18.0
./configure --prefix=/usr/nginx \
--with-http_ssl_module \ #支持https
--with-http_v2_module \ #支持v2版本的http
--with-http_realip_module \ #realip模块用于识别用户真实IP
--with-http_geoip_module \ #统计IP地址信息
--with-http_stub_status_module \ #统计当前访问状态
--with-http_gzip_static_module \  #开启压缩
--with-http_gunzip_module \
--with-pcre \ #加载正则语法
--with-stream \ #开启代理模式
--with-stream_ssl_module \
--with-stream_geoip_module
--with-stream_realip_module

编译成功后当前目录会生成一个Makefile文件,然后使用命令make && make install即完成安装。

验证并启动

sudo /usr/nginx/sbin/nginx -v
nginx version: nginx/1.18.0
 sudo /usr/nginx/sbin/nginx -t
nginx: the configuration file /usr/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/nginx/conf/nginx.conf test is successful
sudo /usr/nginx/sbin/nginx 

启动后,打开浏览器验证


访问测试

创建服务启动脚本

sudo vim /lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/nginx/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/nginx/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/nginx/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

创建后再验证是否加入成功。

配置文件详解

安装完毕后,配置文件在/usr/nginx/conf/nginx.conf[安装路径]/conf/nginx.conf

user    nginx nginx #启动Nginx进程的用户的组,这行可以不写
worker_processes  1; #启动Nginx⼯作进程的数量,可以写数字或auto
worker_cpu_affinity 00000001 00000010 00000100 00001000; #将Nginx⼯作进程绑定到指定的CPU核
⼼,默认Nginx是不进⾏进程绑定的,绑定并不是意味着当前nginx进程独占以⼀核⼼CPU,但是可以保证此进程不会运⾏在其他核⼼上,这就极⼤减少了nginx的⼯作进程在不同的cpu核⼼上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
#error_log logs/error.log; 错误日志位置
#error_log logs/error.log notice; 记录日志级别,除此之外还有[debug | info | notice | warn | error | crit |
alert | emerg]
worker_priority 0; #⼯作进程nice值,-20~19
worker_rlimit_nofile 65536; #这个数字包括Nginx的所有连接(例如与代理服务器的连接等),⽽不仅仅是与
客⼾端的连接,另⼀个考虑因素是实际的并发连接数不能超过系统级别的最⼤打开⽂件数的限制
daemon off; #前台运⾏Nginx服务⽤于测试、docker等环境。
master_process off|on; #是否开启Nginx的master-woker⼯作模式,仅⽤于开发调试场景。
events { #事件模型配置参数
    worker_connections  1024; #设置单个⼯作进程的最⼤并发连接数
    use epoll; #使⽤epoll事件驱动,Nginx⽀持众多的事件驱动,⽐如select、poll、epoll,只能设置在
events模块中设置。这行可以不写,Nginx默认就是epoll
    accept_mutex on; #优化同⼀时刻只有⼀个请求⽽避免多个睡眠进程被唤醒的设置,on为防⽌被同时唤醒默认为off,全部唤醒的过程也成为"惊群",因此nginx刚安装完以后要进⾏适当的优化。
    multi_accept on; Nginx服务器的每个⼯作进程可以同时接受多个新的⽹络连接,但是需要在配置⽂件中配
置,此指令默认为关闭,即默认为⼀个⼯作进程只能⼀次接受⼀个新的⽹络连接,打开后⼏个同时接受多个。
}
http {
    include       mime.types; #导入支持的文件类型
    default_type  application/octet-stream; #设置默认的类型,会提示下载不匹配的类型文件

#自定义优化参数
    sendfile        on; #实现文件零拷贝
    #tcp_nopush on; #在开启了sendfile的情况下,合并请求后统⼀发送给客⼾端。
    #tcp_nodelay off; #在开启了keepalived模式下的连接是否启⽤TCP_NODELAY选项,当为off时,延
迟0.2s发送,默认On时,不延迟发送,⽴即发送⽤⼾相应报⽂。
    #keepalive_timeout 0;
    keepalive_timeout  65; #设置会话保持时间 
    server {
        listen       80; #监听端口
        server_name  localhost; #设置server name,可以以空格隔开写多个并⽀持正则表达式,如
*.keone.site www.keone.* www.(site\d+)\.keone\.site$ default_server
    #charset koi8-r; #设置编码格式,默认是俄语格式,可以改为utf-8
    #access_log logs/host.access.log main
        location / {
            root   html;
            index  index.html index.htm;
        }
        #error_page 404 /404.html; 错误提示页
        # redirect server error pages to the static page /50x.html

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

配置示例

Nginx可以实现将访问转基于不同的IP、不同的端⼝以及不同的域名转发到不同的虚拟主机(也可以是服务器)上,依赖于核⼼模块ngx_http_core_module实现。比如,我们创建一个PC站点,一个移动web站点,然后通过Nginx实现将请求基于域名转发到相应的站点。

新建一个PC web站点

sudo mkdir /data/nginx/html/pc/
sudo mkdir /usr/nginx/conf/conf.d
vim /usr/nginx/conf/conf.d/pc.conf #编辑pc站点的配置文件
server {
  listen 80;
  server_name www.keone.site;
  location / {
    root /data/nginx/html/pc;
  }
}
sudo bash -c "echo 'This is a PC site test page' > /data/nginx/html/pc/index.html" #创建测试页
sudo vim /usr/nginx/conf/nginx.conf
include /usr/nginx/conf/conf.d/*.conf #主配置文件末尾加上这一句,加载配置路径中的配置

新建一个移动web站点

vim /usr/nginx/conf/conf.d/mobile.conf #编辑移动站点的配置文件
server {
  listen 80;
  server_name mobile.keone.site;
  location / {
    root /data/nginx/html/mobile;
  }
}
sudo mkdir /data/nginx/html/mobile/
sudo bash -c "echo 'This is a mobile site test page' > /data/nginx/html/mobile/index.html" #创建测试页

访问测试

测试之前,要先把本机host文件中写入主机名对应的地址,并且重新加载Nginx配置。
编辑本机host文件。如果是windows电脑,修改本机C:\Windows\System32\drivers\etc\host文件,在文件后面插入以下两行(部署Nginx的虚拟机IP是172.16.22.20):

172.16.22.20 www.keone.site
172.16.22.20 mobile.keone.site

然后在ubuntu重新加载

systemctl reload nginx #重新加载配置文件

分别访问两个地址,结果如下:


PC站点

移动站点
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341