Ubuntu 20安装Nginx

    技术2022-07-11  78

    环境

    Ubuntu 20.04

    ➜ ~ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04 LTS Release: 20.04 Codename: focal

    安装

    sudo apt-get install -y nginx

    验证

    ➜ ~ nginx -v nginx version: nginx/1.17.10 (Ubuntu)

    启动/停止

    启动 sudo nginx

    注:如果Nginx已经在运行,则该命令会报错。

    查看Nginx进程 ➜ ~ ps -ef | grep -i nginx | grep -v grep root 3531 1526 0 21:44 ? 00:00:00 nginx: master process nginx www-data 5558 3531 0 22:10 ? 00:00:00 nginx: worker process www-data 5559 3531 0 22:10 ? 00:00:00 nginx: worker process www-data 5560 3531 0 22:10 ? 00:00:00 nginx: worker process www-data 5562 3531 0 22:10 ? 00:00:00 nginx: worker process

    可见有1个master进程和N个(本例中是4个)worker进程。

    Nginx启动后,默认使用80端口。

    ➜ ~ sudo lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 3531 root 7u IPv4 74711 0t0 TCP *:http (LISTEN) nginx 3531 root 8u IPv6 74712 0t0 TCP *:http (LISTEN) nginx 5558 www-data 7u IPv4 74711 0t0 TCP *:http (LISTEN) nginx 5558 www-data 8u IPv6 74712 0t0 TCP *:http (LISTEN) nginx 5559 www-data 7u IPv4 74711 0t0 TCP *:http (LISTEN) nginx 5559 www-data 8u IPv6 74712 0t0 TCP *:http (LISTEN) nginx 5560 www-data 7u IPv4 74711 0t0 TCP *:http (LISTEN) nginx 5560 www-data 8u IPv6 74712 0t0 TCP *:http (LISTEN) nginx 5562 www-data 7u IPv4 74711 0t0 TCP *:http (LISTEN) nginx 5562 www-data 8u IPv6 74712 0t0 TCP *:http (LISTEN) 通过HTTP方式访问localhost 停止Nginx: nginx -s quit sudo nginx -s quit

    如果成功,则返回消息为空。

    注:如果Nginx并没有在运行,则该命令会报错:

    ➜ ~ sudo nginx -s quit nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)

    常用命令

    测试Nginx配置: nginx -t : ➜ ~ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

    如果一切OK,则显示如上信息。否则将会定位到具体哪一行有错误。

    注:每次修改完Nginx配置,建议先运行 nginx -t 测试一下。

    重启Nginx: nginx -s reload sudo nginx -s reload

    如果成功,则返回消息为空。

    注:如果Nginx并没有在运行,则该命令会报错:

    ➜ ~ sudo nginx -s reload nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)

    注: nginx -s <signal> 是给Nginx发送signal信号,比如 stop , quit , reload , reopen 。其中 stop 会立即停止Nginx,而 quit 和 reload 操作则没那么“暴力”,而是会妥善处理当前正在运行的请求。

    添加 HTTP service

    Nginx的配置文件是 /etc/nginx/nginx.conf ,打开该文件,里面有

    ...... http { ...... include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } ......

    在 /etc/nginx/conf.d 目录新建一个后缀名为 conf 的文件,比如 ding.conf ,内容如下:

    server { listen 6688; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } }

    这段代码表明在6688端口开启HTTP服务。

    listen 指定了监听端口location 后面的 / 指明匹配所有requestroot 指定了静态文件的根目录index 指明了默认文件。当request里面没有指定文件名时,会尝试使用默认文件

    比如,现在当我访问6688端口的 / 目录时,实际上就是访问了servers上的 /usr/share/nginx/html/index.html 文件:

    注:该html文件是伴随Nginx安装自动生成的:

    ➜ ~ ll /usr/share/nginx/html total 4.0K -rw-r--r-- 1 root root 612 Apr 14 22:19 index.html

    注:在安装好Nginx,没有任何自定义配置的时候,访问 localhost:80 ,得到的其实也是一个类似的html文件,这是Nginx default配置的HTTP service,详见下面。

    缺省配置

    上面有提到,在 nginx.conf 中:

    ...... include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; ......

    其中 /etc/nginx/conf.d 目录默认是空的,而 /etc/nginx/sites-enabled 目录则包含了一个软链接文件 default :

    ➜ ~ ll /etc/nginx/sites-enabled total 0 lrwxrwxrwx 1 ding ding 34 Jun 29 23:01 default -> /etc/nginx/sites-available/default

    在 /etc/nginx/sites-available/default 文件中包含了缺省设置:

    ...... server { listen 80 default_server; ...... root /var/www/html; ...... index index.html index.htm index.nginx-debian.html; ......

    其中,设置了根目录为 /var/www/html :

    ➜ ~ ll /var/www/html total 4.0K -rw-r--r-- 1 root root 612 Jun 29 23:01 index.nginx-debian.html

    可见,直接访问80端口时,得到的就是这个 index.nginx-debian.html 文件。

    注意, index.html 是排在最前面的,我们可以创建该文件,内容随便写,随后再访问80端口(不需重启Nginx),得到就是 index.html 。

    ➜ ~ curl localhost haha, hello!
    Processed: 0.010, SQL: 9