菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
405
0

nginx安装

原创
05/13 14:22
阅读数 17770

部分内容参考博客:http://www.cnblogs.com/skynet/p/4146083.html

下载nginx安装包:

http://www.nginx.org
本人下载了最新版本:nginx-1.10.1.tar.gz
将安装包放到安装目录下,这里是/install

  

环境:

[root@vm-xiluhua][/]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
系统工具:gcc,automake工具

 

查看gcc版本:

[xiluhua@vm-xiluhua][~]$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)

 

查看automake工具版本:

[xiluhua@vm-xiluhua][~]$ rpm -qf /usr/bin/autoconf
autoconf-2.69-11.el7.noarch

 

nginx对第三方库的依赖:

nginx rewrite模块:pcre库
nginx gzip模块:zlib库
nginx ssl模块:openssl库

查看当前系统以上三个库的安装情况:

[xiluhua@vm-xiluhua][~]$ rpm -q pcre
pcre-8.32-15.el7.x86_64

[xiluhua@vm-xiluhua][~]$ rpm -q zlib
zlib-1.2.7-15.el7.x86_64

[xiluhua@vm-xiluhua][~]$ rpm -q openssl
openssl-1.0.1e-42.el7.9.x86_64

 遗憾的是,由于安装包太新,系统内的这三个库都没法用。

执行安装包内的

./configure

显示没有找到这两个库[pcre,zlib]:(以zlib举例)

./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.

到官网上下或直接yum

到官网上下:

1.1.安装pcre
1.         获取pcre编译安装包,在http://www.pcre.org/上可以获取当前最新的版本

2.         解压缩pcre-xx.tar.gz包。

3.         进入解压缩目录,执行./configure。

4.         make & make install

1.2.安装openssl
1.         获取openssl编译安装包,在http://www.openssl.org/source/上可以获取当前最新的版本。

2.         解压缩openssl-xx.tar.gz包。

3.         进入解压缩目录,执行./config。

4.         make & make install

1.3.安装zlib
1.         获取zlib编译安装包,在http://www.zlib.net/上可以获取当前最新的版本。

2.         解压缩openssl-xx.tar.gz包。

3.         进入解压缩目录,执行./configure。

4.         make & make install

直接yum

yum install pcre-devel
yum install zlib-devel

以上两个yum后执行.configure,显示Openssl没有安装:

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using builtin md5 code
  + sha1 library is not found
  + using system zlib library

继续yum

yum install openssl openssl-devel
yum install perl-Digest-SHA1.x86_64

再次执行.configure,显示Openssl还是没有安装:

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + md5: using system crypto library
  + sha1: using system crypto library
  + using system zlib library

原因:开启ssl 模块需要./configure执行时带上选项 --with-http_ssl_module

再次执行:

./configure --with-http_ssl_module

成功开启:

Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + md5: using OpenSSL library
  + sha1: using OpenSSL library
  + using system zlib library
 
  nginx path prefix: "/usr/local/nginx"            #安装路径
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

执行make & make install

由于安装路径默认:/usr/local/nginx,而当前用户没有root权限,make失败

make[1]: 离开目录“/install/nginx-1.10.1”
test -d '/usr/local/nginx' || mkdir -p '/usr/local/nginx'
mkdir: 无法创建目录"/usr/local/nginx": 权限不够
make[1]: *** [install] 错误 1
make[1]: 离开目录“/install/nginx-1.10.1”
make: *** [install] 错误 2
[1]+  完成                  make

重新./configure,添加指定安装目录:--prefix=/install/program/nginx-1.10.1

./configure --with-http_ssl_module --prefix="/install/program/nginx-1.10.1" --with-http_stub_status_module

执行结果:

Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + md5: using OpenSSL library
  + sha1: using OpenSSL library
  + using system zlib library
 
  nginx path prefix: "/install/program/nginx-1.10.1"        #指定后的安装目录
  nginx binary file: "/install/program/nginx-1.10.1/sbin/nginx"
  nginx modules path: "/install/program/nginx-1.10.1/modules"
  nginx configuration prefix: "/install/program/nginx-1.10.1/conf"
  nginx configuration file: "/install/program/nginx-1.10.1/conf/nginx.conf"
  nginx pid file: "/install/program/nginx-1.10.1/logs/nginx.pid"
  nginx error log file: "/install/program/nginx-1.10.1/logs/error.log"
  nginx http access log file: "/install/program/nginx-1.10.1/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

再次执行make & make install,成功完成。

[xiluhua@vm-xiluhua][/install/nginx-1.10.1]$ make & make install
[1] 106846
make -f objs/Makefile install
make -f objs/Makefile
make[1]: 进入目录“/install/nginx-1.10.1”
test -d '/install/program/nginx-1.10.1' || mkdir -p '/install/program/nginx-1.10.1'
test -d '/install/program/nginx-1.10.1/sbin' \|| mkdir -p '/install/program/nginx-1.10.1/sbin'
test ! -f '/install/program/nginx-1.10.1/sbin/nginx'\ || mv '/install/program/nginx-1.10.1/sbin/nginx' \'/install/program/nginx-1.10.1/sbin/nginx.old'
cp objs/nginx '/install/program/nginx-1.10.1/sbin/nginx'
make[1]: 进入目录“/install/nginx-1.10.1”
make[1]: 对“build”无需做任何事。
make[1]: 离开目录“/install/nginx-1.10.1”
test -d '/install/program/nginx-1.10.1/conf' \|| mkdir -p '/install/program/nginx-1.10.1/conf'
cp conf/koi-win '/install/program/nginx-1.10.1/conf'
cp conf/koi-utf '/install/program/nginx-1.10.1/conf'
cp conf/win-utf '/install/program/nginx-1.10.1/conf'
test -f '/install/program/nginx-1.10.1/conf/mime.types' \ || cp conf/mime.types '/install/program/nginx-1.10.1/conf'
cp conf/mime.types '/install/program/nginx-1.10.1/conf/mime.types.default'
test -f '/install/program/nginx-1.10.1/conf/fastcgi_params' \ || cp conf/fastcgi_params '/install/program/nginx-1.10.1/conf'
cp conf/fastcgi_params \ '/install/program/nginx-1.10.1/conf/fastcgi_params.default'
test -f '/install/program/nginx-1.10.1/conf/fastcgi.conf' \|| cp conf/fastcgi.conf '/install/program/nginx-1.10.1/conf'
cp conf/fastcgi.conf '/install/program/nginx-1.10.1/conf/fastcgi.conf.default'
test -f '/install/program/nginx-1.10.1/conf/uwsgi_params' \|| cp conf/uwsgi_params '/install/program/nginx-1.10.1/conf'
cp conf/uwsgi_params \ '/install/program/nginx-1.10.1/conf/uwsgi_params.default'
test -f '/install/program/nginx-1.10.1/conf/scgi_params' \|| cp conf/scgi_params '/install/program/nginx-1.10.1/conf'
cp conf/scgi_params \ '/install/program/nginx-1.10.1/conf/scgi_params.default'
test -f '/install/program/nginx-1.10.1/conf/nginx.conf' \ || cp conf/nginx.conf '/install/program/nginx-1.10.1/conf/nginx.conf'
cp conf/nginx.conf '/install/program/nginx-1.10.1/conf/nginx.conf.default'
test -d '/install/program/nginx-1.10.1/logs' \ || mkdir -p '/install/program/nginx-1.10.1/logs'
test -d '/install/program/nginx-1.10.1/logs' \ || mkdir -p '/install/program/nginx-1.10.1/logs'
test -d '/install/program/nginx-1.10.1/html' \ || cp -R html '/install/program/nginx-1.10.1'
test -d '/install/program/nginx-1.10.1/logs' \ || mkdir -p '/install/program/nginx-1.10.1/logs'
make[1]: 离开目录“/install/nginx-1.10.1”
[1]+  完成                  make

启动nginx前测试配置是否正确:

[xiluhua@vm-xiluhua][/install/program/nginx-1.10.1/sbin]$ ./nginx -t     #测试配置是否正确
nginx: the configuration file /install/program/nginx-1.10.1/conf/nginx.conf syntax is ok
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
nginx: configuration file /install/program/nginx-1.10.1/conf/nginx.conf test failed

这是端口号的问题,在Linux中1024以下的端口号都需要root权限才能使用,所以普通用户启动程序绑定会报出权限问题。使用sudo解决:

[xiluhua@vm-xiluhua][/install/program/nginx-1.10.1/sbin]$ sudo ./nginx -t
nginx: the configuration file /install/program/nginx-1.10.1/conf/nginx.conf syntax is ok
nginx: configuration file /install/program/nginx-1.10.1/conf/nginx.conf test is successful

 启动nginx,没有报错,在bash下没有报错默认就是成功

[xiluhua@vm-xiluhua][/install/program/nginx-1.10.1/sbin]$ sudo ./nginx
[sudo] password for xiluhua: 

 

验证启动状态

浏览器验证:虚拟机ip为192.168.178.132,nginx.conf文件默认监听的是80端口

192.168.178.132:80
浏览器显示:
无法显示此网页
主机telnet 192.168.178.132 80
CMD显示:无法连接到 .... 端口:80

虚拟机内ps验证:显示已经启动成功

[xiluhua@vm-xiluhua][/install/program/nginx-1.10.1/sbin]$ ps -ef|grep nginx
root     107196      1  0 23:16 ?        00:00:00 nginx: master process ./nginx
nobody   107197 107196  0 23:16 ?        00:00:00 nginx: worker process
xiluhua  107199  97234  0 23:16 pts/0    00:00:00 grep --color=auto nginx

检查系统防火墙:显示开启状态

[root@vm-xiluhua][/install]# /bin/systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 六 2016-06-11 14:01:00 CST; 1 months 18 days ago
 Main PID: 1024 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─1024 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

关闭防火墙:

[root@vm-xiluhua][/install]# /bin/systemctl stop firewalld.service 
 
[root@vm-xiluhua][/install]# /bin/systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 六 2016-07-30 23:34:43 CST; 9s ago
 Main PID: 1024 (code=exited, status=0/SUCCESS)

重新浏览器验证:403点亮成功!

 

403原因是由于启动使用sudo命令,等于是root启动的,但是没有在ngingx.conf中配置可以运行nginx服务器的用户,最终导致无法正常显示nginx首页。

[xiluhua@vm-xiluhua][/install/program/nginx-1.10.1]$ ps -ef|grep nginx
root     110735      1  0 00:09 ?        00:00:00 nginx: master process sbin/./nginx  启动者:root
nobody   110736 110735  0 00:09 ?        00:00:00 nginx: worker process
xiluhua  110744  97234  0 00:09 pts/0    00:00:00 grep --color=auto nginx

 使用root管理员账户需要在ngingx.conf中第一行配置user节点:

user  root;        #启动用户配置为root

再次浏览器验证:Welcome to nginx!点亮!

 

到这一步,nginx安装基本完成,但使用使用管理员账户root启动nginx始终不合适,解决方案:

第一步,将nginx的监听端口(nginx.conf)由80改回8080

第二步,通过Iptables实现80到8080的转发,命令为:

vi /etc/sysconfig/iptables iptables
-t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
这样,用户访问80端口和8080端口其实都到8080端口了

 

使用非管理员账户启动nginx,ps验证:

[xiluhua@vm-xiluhua][/install/program/nginx-1.10.1]$ ps -ef|grep nginx
xiluhua  115761      1  0 08:05 ?        00:00:00 nginx: master process sbin/./nginx
xiluhua  119548 115761  0 08:17 ?        00:00:00 nginx: worker process
xiluhua  120809 114188  0 08:35 pts/0    00:00:00 grep --color=auto nginx

浏览器验证

80端口:

8080端口:

至此,安装完美完成。

Thanks for reading!

发表评论

0/200
405 点赞
0 评论
收藏
为你推荐 换一批