讲师: 白树明

分类

源码管理;自动部署; Web服务器;

Web环境部署与上线流程

环境搭建

服务器环境搭建

Nginx

是什么?

轻量级服务器;资源占用相比Apache小;

能做什么?

@Web服务器@;反向代理服务器功能;IMAP / POP3/ SMTP代理服务器

Web服务器: 相当于一个中间件,开发写出来的代码由它共享并且展示给互联网广大用户

  1. 种类: `Apache`
  2. 衍生: `tengine`[淘宝], `openresrt`[章亦春]等

资源文档:

  1. 官网:[[nginx news](https://nginx.org/)]
  2. 官方文档:[[nginx documentation](https://nginx.org/en/docs/)]
  3. 中文文档:[[Nginx中文文档](https://www.nginx.cn/doc/)]

准备工作

  1. yum -y install gcc make wget pcre-devel zlib zlib-devel
  2. yum -y install lsof elinks

查看外部配置信息

Nginx简介 - 图1

网卡配置信息

  1. [root@localhost network-scripts]# sudo vim ifcfg-ens33
  2. TYPE=Ethernet
  3. PROXY_METHOD=none
  4. BROWSER_ONLY=no
  5. BOOTPROTO=static
  6. DEFROUTE=yes
  7. IPADDR="192.168.124.9"
  8. NETMASK="255.255.255.0"
  9. GATEWAY="192.168.124.2"
  10. IPV4_FAILURE_FATAL=no
  11. IPV6INIT=yes
  12. IPV6_AUTOCONF=yes
  13. IPV6_DEFROUTE=yes
  14. IPV6_FAILURE_FATAL=no
  15. IPV6_ADDR_GEN_MODE=stable-privacy
  16. NAME=ens33
  17. UUID=608dbc8e-3115-4f58-95ae-a5fadbc3aedb
  18. DEVICE=ens33
  19. ONBOOT=no

安装过程

  1. 下载
  1. yum -y install wget # 看是否安装了wget包
  2. wget https://nginx.org/download/nginx-1.21.3.tar.gz -P /usr/src # 从官网版本黏贴
  3. du -h /usr/src/nginx-1.21.3.tar.gz # 查看大小
  4. tar xf nginx-1.21.3.tar.gz # 解压
  5. cd nginx-1.21.3 # 切换工作路径
  6. && make && make install # 检查配置,指定安装目录并且编译安装
  1. 配置

1)检查环境是否满足安装条件,解决依赖

  1. yum -y install prce-devel zlib zlib-devel

2)指定安装方式 配置文件 命令文件放在那里

  1. ./configure --prefix=/usr/local/nginx

3)开启模块功能 内置,第三方

4)指定安装位置

  1. 编译

    1. make
  2. 安装

    1. make install
  1. [root@vvkt7whznuckhiz2-0723575 nginx-1.21.3]# ./configure --help
  2. --help print this message
  3. --prefix=PATH set installation prefix
  4. --sbin-path=PATH set nginx binary pathname
  5. --modules-path=PATH set modules path
  6. --conf-path=PATH set nginx.conf pathname
  7. --error-log-path=PATH set error log pathname
  8. --pid-path=PATH set nginx.pid pathname
  9. --lock-path=PATH set nginx.lock pathname

总结

  1. # 安装位置
  2. cd /usr/local/nginx
  3. # 解压位置
  4. cd /usr/src/nginx以及版本号

使用

检查端口占用[默认端口为80]

  1. netstat -tunlp | grep "80"
  2. lsof -i :80
  3. netstat -ntpl # 检查正在监听的端口

启动

  1. /usr/local/nginx/sbin/nginx
  2. lsof -i :80 # 有输出表示有占用

验证是否安装成功

  1. yum -y install elinks
  2. elinks http://192.168.1.9 --dump

配置文件详解

亦称变量文件,保存软件运行时需要的各种参数;

配置文件存储的路径

/usr/local/nginx/conf/nginx.conf

完整配置文件
  1. #}
  2. }
  3. # another virtual host using mix of IP-, name-, and port-based configuration
  4. #
  5. #server {
  6. # listen 8000;
  7. # listen somename:8080;
  8. # server_name somename alias another.alias;
  9. # location / {
  10. # 启动子进程程序的默认用户
  11. #user nobody;
  12. # 一个主进程和多个工作进程;工作进程是单进程多线程的,且不需要特殊授权即可运行;这里定义的是工作进程的数量;
  13. worker_processes 1;
  14. # 全局错误日志的位置以及日志格式
  15. #error_log logs/error.log;
  16. #error_log logs/error.log notice;
  17. #error_log logs/error.log info;
  18. # 设置主进程号
  19. #pid logs/nginx.pid;
  20. events {
  21. # 每个工作进程最大的并发数
  22. worker_connections 1024;
  23. }
  24. # http服务器的设置
  25. http {
  26. # 设定mime类型,类型由mime.type文件定义
  27. include mime.types;
  28. default_type application/octet-stream;
  29. # 设置日志格式
  30. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  31. # '$status $body_bytes_sent "$http_referer" '
  32. # '"$http_user_agent" "$http_x_forwarded_for"';
  33. # remote_addr 和 http_x_forwarded_for 用以记录客户端的ip地址;
  34. # remote_user 用来记录客户端用户名称;
  35. # time_local 记录时区;
  36. # request 记录请求的url与http协议;
  37. # status 用来记录请求状态;成功则为200;
  38. # body_bytes_sent 记录发送给客户端文件主体内容的大小;
  39. # http_referer 记录从哪个页面链接访问过来的;
  40. # http_user_agent 记录浏览器相关信息
  41. #全局访问日志路径
  42. #access_log logs/access.log main;
  43. # [指令]sendfile指定nginx是否调用sendfile函数(zero copy方式)来输出文件,对于普通应用,必须设为on.
  44. sendfile on;
  45. # 此选项允许或者禁止使用socket的TCP_CORK选项,此选项仅在使用sendfile的时候使用
  46. #tcp_nopush on;
  47. # 长连接超时时间
  48. #keepalive_timeout 0;
  49. keepalive_timeout 65;
  50. # 开启压缩
  51. #gzip on;
  52. server {
  53. # 虚拟主机使用的端口
  54. listen 80;
  55. # 虚拟主机域名
  56. server_name localhost;
  57. # 字符集
  58. #charset koi8-r;
  59. # 自定义虚拟主机的访问日志路径,可以不使用全局的日志路径
  60. #access_log logs/host.access.log main;
  61. # 定义Web根路径
  62. location / {
  63. # 根目录路径
  64. root html;
  65. # 索引页
  66. index index.html index.htm;
  67. }
  68. # 根据错误码,返回对应的页面
  69. #error_page 404 /404.html;
  70. # 定义页面路径
  71. # redirect server error pages to the static page /50x.html
  72. #
  73. error_page 500 502 503 504 /50x.html;
  74. location = /50x.html {
  75. root html;
  76. }
  77. # 定义反向代理服务器,数据服务器时 lamp模型
  78. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  79. #
  80. #location ~ \.php$ {
  81. # proxy_pass http://127.0.0.1;
  82. #}
  83. # 定义PHP为本机服务的模型
  84. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  85. #
  86. #location ~ \.php$ {
  87. # root html;
  88. # fastcgi_pass 127.0.0.1:9000;
  89. # fastcgi_index index.php;
  90. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  91. # include fastcgi_params;
  92. #}
  93. # deny access to .htaccess files, if Apache's document root
  94. # concurs with nginx's one
  95. #
  96. # 拒绝apache DR目录以及子目录下的.htaccessw
  97. #location ~ /\.ht {
  98. # deny all;
  99. #}
  100. }
  101. # another virtual host using mix of IP-, name-, and port-based configuration
  102. #
  103. #server {
  104. # listen 8000;
  105. # listen somename:8080;
  106. # server_name somename alias another.alias;
  107. # location / {
  108. #user nobody;
  109. worker_processes 1;
  110. #error_log logs/error.log;
  111. #error_log logs/error.log notice;
  112. #error_log logs/error.log info;
  113. #pid logs/nginx.pid;
  114. events {
  115. worker_connections 1024;
  116. }
  117. http {
  118. include mime.types;
  119. default_type application/octet-stream;
  120. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  121. # '$status $body_bytes_sent "$http_referer" '
  122. # '"$http_user_agent" "$http_x_forwarded_for"';
  123. #access_log logs/access.log main;
  124. sendfile on;
  125. #tcp_nopush on;

分支1—查验Nginx启动用户
  1. lsof -i :80
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. nginx 25421 root 6u IPv4 136364 0t0 TCP *:http (LISTEN)
  4. nginx 25422 nobody 6u IPv4 136364 0t0 TCP *:http (LISTEN)

分支2-创建只能用于启动程序的用户
  1. # 创建目标用户
  2. useradd -s /sbin/nologin -r www
  3. 第一个参数为:指定登录时使用的shell,默认为空
  4. 第二个参数为:该用户为系统管理员
  5. # 编辑配置文件指定启动用户
  6. vim nginx.conf # 将配置文件更为以下内容
  7. user www;
  8. worker_processes 1;
  9. # 关闭进程并且查看是否关闭成功
  10. killall nginx
  11. lsof -i :80
  12. # 重启并且查看启动用户
  13. [root conf]# cd ..
  14. [root@ nginx]# ./sbin/nginx
  15. [root@ nginx]# lsof -i :80
  16. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  17. nginx 25625 root 6u IPv4 137912 0t0 TCP *:http (LISTEN)
  18. nginx 25626 www 6u IPv4 137912 0t0 TCP *:http (LISTEN)

分支3-查看PID存放的位置
  1. cat logs/nginx.pid
  2. 25625

分支4-查看有谁对服务器进行过访问
  1. cat logs/access.log
  2. 192.168.1.9 - - [03/Oct/2021:20:41:57 +0800] "GET / HTTP/1.1" 200 615 "-" "ELinks/0.12pre6 (textmode; Linux; -)"

默认网站

默认网页的存放位置
  1. ls
  2. 50x.html index.html
  3. pwd
  4. /usr/local/nginx/html

准备子网页内容
  1. [root@vvkt7whznuckhiz2-0723575 nginx]# cd html
  2. [root@vvkt7whznuckhiz2-0723575 html]# mkdir a
  3. [root@vvkt7whznuckhiz2-0723575 html]# mkdir b
  4. [root@vvkt7whznuckhiz2-0723575 html]# mkdir c
  5. [root@vvkt7whznuckhiz2-0723575 html]# echo aaaa > a/index.html
  6. [root@vvkt7whznuckhiz2-0723575 html]# echo bbbb > b/index.html
  7. [root@vvkt7whznuckhiz2-0723575 html]# echo cccc > c/index.html

设置允许主机

  1. 48 location /a {
  2. 49 allow 122.198.1.9;
  3. 50 allow 10.19.1.26;
  4. 51 deny all;
  5. 52 }

关闭进程以及重新启动

  1. killall nginx
  2. ../sbin/nginx
  3. lsof -i :3389
  4. elinks http://122.198.1.9/a:3389

报错

1.nginx: [emerg] invalid parameter "localhost" in /usr/local/nginx/conf/nginx.conf:49
  1. delete allow localhost
  2. 指定本机IP地址;

管理;优化;负载均衡;缓存;