1.下载压缩包:

1)如果无法访问外网,先去http://nginx.org/en/download.html下载需要安装包,再上传
以 nginx-1.20.2.tar.gz 版本为例:
image.png
下载完成以后,上传服务器对应用户下面

  1. su zcjk
  2. cd /home/zcjk/
  3. mkdir nginx
  4. cd nginx
  5. rz -be
  6. 回车
  7. 选择要上传的文件
  8. 解压
  9. tar -zxvf nginx-1.20.2.tar.gz

2)如果有外网,则直接wget下载

  1. wget http://nginx.org/download/nginx-1.20.2.tar.gz

解压

  1. tar -zxvf nginx-1.20.2.tar.gz

2.设置nginx的安装目录

最好指定安装位置,有可能默认路径没有权限,所以这里安装到当前用户目录下。 同时安装相关模块。

  1. cd nginx-1.20.2/
  2. ./configure --prefix=/home/zcjk/nginx/ --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module

如果缺少pcre依赖,则先安装一下依赖。
这里遇到一个坑,因为需要pcre和zlib的依赖,但是普通用户安装完,安装nginx执行make && make install时,报错,这里给root用户安装相关依赖

  1. sudo yum -y install gcc automake autoconf libtool make
  2. sudo yum install gcc gcc-c++
  3. sudo yum -y install pcre-devel
  4. sudo yum -y install openssl openssl-devel

3.安装

  1. make && make install

因为之前已经给整个文件夹/home/zcjk/授过权了,如果新用户没有授权过,则先授权

  1. chown zcjk:zcjk -R /home/zcjk/nginx

4.启动:

  1. cd /home/zcjk/nginx/
  2. ./sbin/nginx

关于此目录下文件说明:
conf 配置文件
html 网页文件
logs 日志文件
sbin 主要二进制程序

注:以非root权限启动时,会出现 nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied) 错误。
原因:Linux只有root用户可以使用1024以下的端口

解决办法:
1.用root权限启动
2.将nginx.conf文件中的80端口改为1024以上

5.允许启动80端口

一开始我们查看nginx的权限描述:

  1. cd /home/zcjk/nginx/sbin
  2. ll
  3. -rwxr-xr-x 1 nginx dev 2408122 Sep 5 16:01 nginx


这个时候必然是无法正常启动的。
首先修改文件所属用户为root:

  1. chown root nginx

然后再加上s权限:

  1. chmod u+s nginx

再次查看权限描述的时候:

  1. -rwsrwxr-x 1 root zcjk 6651176 Apr 25 14:39 nginx

最后修改nginx的配置文件,把#user nobody;改成user root;

  1. cd /home/zcjk/nginx/conf
  2. sudo vim nginx.conf
  3. #user nobody;
  4. # 注释打开 用户改成root
  5. user root;

为了支持开机自启,需要把nginx配置文件的 #pid logs/nginx.pid;注释打开

  1. # 把注释打开
  2. pid logs/nginx.pid;

保存修改。

这样就能启动了。

  1. cd /home/zcjk/nginx/
  2. ./sbin/nginx

6.验证

image.png
成功。

最后访问一下,因为有可能会提示类似403没有权限问题,第5步修改nginx配置就是为了获取权限。

  1. curl -i localhost


image.png
页面正常访问,OK。

7.设置开机自启

7.1在/etc/init.d/目录下创建nginx文件

  1. sudo vim /etc/init.d/nginx

7.2加下面的内容复制到nginx配置文件中

  1. #!/bin/sh
  2. #
  3. # nginx - this script starts and stops the nginx daemon
  4. #
  5. # chkconfig: - 85 15
  6. # description: NGINX is an HTTP(S) server, HTTP(S) reverse
  7. # proxy and IMAP/POP3 proxy server
  8. # processname: nginx
  9. # config: /etc/nginx/nginx.conf
  10. # config: /etc/sysconfig/nginx
  11. pidfile="/home/zcjk/nginx/logs/nginx.pid"
  12. # Source function library.
  13. . /etc/rc.d/init.d/functions
  14. # Source networking configuration.
  15. . /etc/sysconfig/network
  16. # Check that networking is up.
  17. [ "$NETWORKING" = "no" ] && exit 0
  18. nginx="/home/zcjk/nginx/sbin/nginx"
  19. prog=$(basename $nginx)
  20. NGINX_CONF_FILE="/home/zcjk/nginx/conf/nginx.conf"
  21. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  22. lockfile=/var/lock/subsys/nginx
  23. make_dirs() {
  24. # make required directories
  25. user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=([^ ]*).*/1/g' -`
  26. if [ -z "`grep $user /etc/passwd`" ]; then
  27. useradd -M -s /bin/nologin $user
  28. fi
  29. options=`$nginx -V 2>&1 | grep 'configure arguments:'`
  30. for opt in $options; do
  31. if [ `echo $opt | grep '.*-temp-path'` ]; then
  32. value=`echo $opt | cut -d "=" -f 2`
  33. if [ ! -d "$value" ]; then
  34. # echo "creating" $value
  35. mkdir -p $value && chown -R $user $value
  36. fi
  37. fi
  38. done
  39. }
  40. start() {
  41. [ -x $nginx ] || exit 5
  42. [ -f $NGINX_CONF_FILE ] || exit 6
  43. make_dirs
  44. echo -n $"Starting $prog: "
  45. daemon $nginx -c $NGINX_CONF_FILE
  46. retval=$?
  47. echo
  48. [ $retval -eq 0 ] && touch $lockfile
  49. return $retval
  50. }
  51. stop() {
  52. echo -n $"Stopping $prog: "
  53. killproc $prog -QUIT
  54. retval=$?
  55. echo
  56. [ $retval -eq 0 ] && rm -f $lockfile
  57. return $retval
  58. }
  59. restart() {
  60. configtest || return $?
  61. stop
  62. sleep 1
  63. start
  64. }
  65. reload() {
  66. configtest || return $?
  67. echo -n $"Reloading $prog: "
  68. killproc $nginx -HUP
  69. RETVAL=$?
  70. echo
  71. }
  72. force_reload() {
  73. restart
  74. }
  75. configtest() {
  76. $nginx -t -c $NGINX_CONF_FILE
  77. }
  78. rh_status() {
  79. status $prog
  80. }
  81. rh_status_q() {
  82. rh_status >/dev/null 2>&1
  83. }
  84. case "$1" in
  85. start)
  86. rh_status_q && exit 0
  87. $1
  88. ;;
  89. stop)
  90. rh_status_q || exit 0
  91. $1
  92. ;;
  93. restart|configtest)
  94. $1
  95. ;;
  96. reload)
  97. rh_status_q || exit 7
  98. $1
  99. ;;
  100. force-reload)
  101. force_reload
  102. ;;
  103. status)
  104. rh_status
  105. ;;
  106. condrestart|try-restart)
  107. rh_status_q || exit 0
  108. ;;
  109. *)
  110. echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
  111. exit 2
  112. esac

7.3设置nginx文件的权限

  1. sudo chmod 755 /etc/init.d/nginx
  2. # sudo chmod a+x /etc/init.d/nginx 这个权限不行,必须是上面那个,否则普通用户无法关闭、启动程序

7.4将nginx服务加入chkconfig管理列表

  1. sudo chkconfig --add /etc/init.d/nginx

7.5设置终端模式开机启动

  1. sudo chkconfig nginx on

7.6使用service管理服务

  1. sudo service nginx start #启动服务
  2. sudo service nginx stop #停止服务
  3. sudo service nginx restart #重启服务
  4. sudo service nginx status #查询服务的状态
  5. sudo service nginx relaod #刷新配置文

如果之前因为配置,导致执行报错,刷新systemctl

  1. sudo systemctl daemon-reload #刷新