Ubuntu 安装 Nginx (12.04/14.04/16.04)

本文主要介绍如何在Ubuntu (12.04/14.04/16.04)系统上安装当前相当流行的web 服务器Nginx. 越来越多的商业应用已经将web服务器从Apache转到Nginx. 因为Nginx服务会比Apache 服务器更加节省系统资源,而且也可以用来做反向代理服务器。

Nginx 是什么

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 -来自百度百科

Ubuntu 下安装配置Nginx

1# 安装nginx软件包

在ubuntu命令行下,可以通过执行apt-get命令来安装nginx相关的包,执行下面的命令:

$sudo apt-get update
$sudo apt-get install nginx

命令输出如下:

root@devops:~# sudo apt-get update
sudo: 无法解析主机:devops
命中:1 http://mirrors.aliyun.com/ubuntu xenial InRelease
命中:2 http://mirrors.aliyun.com/ubuntu xenial-security InRelease
命中:3 http://mirrors.aliyun.com/ubuntu xenial-updates InRelease
命中:4 http://mirrors.aliyun.com/ubuntu xenial-proposed InRelease
命中:5 http://mirrors.aliyun.com/ubuntu xenial-backports InRelease
忽略:6 http://dl.google.com/linux/chrome/deb stable InRelease
命中:7 http://dl.google.com/linux/chrome/deb stable Release
忽略:8 http://archive.ubuntu.com/ubuntu trusty InRelease
命中:9 http://ppa.launchpad.net/webupd8team/java/ubuntu xenial InRelease
命中:11 http://archive.ubuntu.com/ubuntu trusty Release
正在读取软件包列表... 完成
root@devops:~# apt-get install nginx
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
java-common libappindicator1 libindicator7 linux-headers-4.10.0-28
linux-headers-4.10.0-28-generic linux-image-4.10.0-28-generic
linux-image-extra-4.10.0-28-generic
使用'apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
nginx-common nginx-core
建议安装:
fcgiwrap nginx-doc
下列【新】软件包将被安装:
nginx nginx-common nginx-core
升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 207 个软件包未被升级。
需要下载 458 kB 的归档。
解压缩后会消耗 1,482 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.aliyun.com/ubuntu xenial-security/main amd64 nginx-common all 1.10.3-0ubuntu0.16.04.2 [26.6 kB]
获取:2 http://mirrors.aliyun.com/ubuntu xenial-security/main amd64 nginx-core amd64 1.10.3-0ubuntu0.16.04.2 [428 kB]
获取:3 http://mirrors.aliyun.com/ubuntu xenial-security/main amd64 nginx all 1.10.3-0ubuntu0.16.04.2 [3,490 B]
已下载 458 kB,耗时 0秒 (1,540 kB/s)
正在预设定软件包 ...
正在选中未选择的软件包 nginx-common。
(正在读取数据库 ... 系统当前共安装有 290959 个文件和目录。)
正准备解包 .../nginx-common_1.10.3-0ubuntu0.16.04.2_all.deb  ...
正在解包 nginx-common (1.10.3-0ubuntu0.16.04.2) ...
正在选中未选择的软件包 nginx-core。
正准备解包 .../nginx-core_1.10.3-0ubuntu0.16.04.2_amd64.deb  ...
正在解包 nginx-core (1.10.3-0ubuntu0.16.04.2) ...
正在选中未选择的软件包 nginx。
正准备解包 .../nginx_1.10.3-0ubuntu0.16.04.2_all.deb  ...
正在包 nginx (1.10.3-0ubuntu0.16.04.2) ...
正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
正在处理用于 ufw (0.35-0ubuntu2) 的触发器 ...
正在处理用于 systemd (229-4ubuntu21.1) 的触发器 ...
正在设置 nginx-common (1.10.3-0ubuntu0.16.04.2) ...
正在设置 nginx-core (1.10.3-0ubuntu0.16.04.2) ...
正在设置 nginx (1.10.3-0ubuntu0.16.04.2) ...
正在处理用于 systemd (229-4ubuntu21.1) 的触发器 ...
正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
正在处理用于 ufw (0.35-0ubuntu2) 的触发器 ...

这样我们已经安装好Nginx服务区所需要的软件包。

2# 配置防火墙,开启http访问

在ubuntu系统里,配置防火墙的命令是ufw,首先我们可以查看下ufw配置列表,执行命令如下:

$sudo ufw app list

命令输出如下:

root@devops:~# ufw app list
可用应用程序:
CUPS
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

从上面的输出,我们可以考到通过ufw工具可以控制的应用程序的防火墙设置。

配置说明如下:

  • Nginx Full –可以可以打开Nginx web服务器所需要的80 和443 端口号
  • Nginx HTTP – 这个配置用来打开Http端口号80,允许通过80端口访问web服务
  • Nginx HTTPS – 只打开HTTPS端口号443.

通过执行下面的命令来开启HTTP端口,添加防火墙策略:

$ sudo ufw allow ‘Nginx HTTP’

命令输出如下:

root@devops:~# ufw allow 'Nginx HTTP'
防火墙规则已更新
规则已更新(v6)

查看防火墙状态

执行下面的命令:

$sudo ufw status

命令输出如下:

root@devops:~# ufw status
状态: 激活

至                          动作          来自
-                          --          --
Nginx HTTP                 ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
Nginx HTTP (v6)            ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)

从上面的输出我们可以看到HTTP 端口允许来自任何主机的访问请求。

3# 查看Nginx服务的状态

当我们安装完Nginx软件包后,会自动开启Nginx服务,执行下面的命令查看服务是否正常启动:

#systemctl status nginx

命令输出如下:

root@devops:~# systemctl status nginx
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2018-03-27 21:52:10 CST; 14min ago
Main PID: 2482 (nginx)
CGroup: /system.slice/nginx.service
├─2482 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
└─2484 nginx: worker process
3月 27 21:52:09 devops systemd[1]: Starting A high performance web server and a reverse proxy server...
3月 27 21:52:10 devops systemd[1]: nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument
3月 27 21:52:10 devops systemd[1]: Started A high performance web server and a reverse proxy server.

从输出看到状态是Active, 说明已经正常启动。

4# 查看是否能够通过web页面正常访问

在浏览器里输入Nginx服务器的网络地址,查看Nginx页面是否能够正常显示。

ubuntu 安装nginx 1

5# 将nginx服务加到自启动里

如果想让系统重启后能够自动启动Nginx服务,可以执行下面的命令来开启开机自动启动。

#systemctl enable nginx

命令输出如下:

root@devops:~# systemctl enable nginx
Synchronizing state of nginx.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable nginx

6# Nginx 服务重启/停止/启动

如果需要启动Nginx服务,执行命令:

#systemctl  start nginx

如果要停止Nginx 服务,执行命令如下:

#systemctl stop nginx

如果需要重新启动Nginx服务,执行命令:

#systemctl restart nginx

Nginx 服务器的主配置是/etc/nginx/nginx.conf,如果需要修改nginx的变量值,可以编辑这个文件。

Nginx服务器的日志文件为/var/log/nginx/access.log 和 /var/log/nginx/error.log 错误日志文件。

ubuntu nginx php-fpm 安装

执行apt-get命令来安装php-fpm,如下:

#apt-get install php5-fpm

99%的人还阅读了:

关于Nginx支持.htaccess的分析

之前曾在Typecho开发群中与王轶讨论了关于Nginx支持.htaccess文件的问题。王轶认为,Nginx能够支持.htaccess规 则,且兼容Apache规则。我认为,Nginx支持使用.htaccess文件来存储Nginx的伪静态规则,不兼容.htaccess规则。

我之所以这么说,是有原因的,我查阅了Nginx的官方文档文档1/文档2, 文档1是Nginx的Rewrite模块的doc,详细的解释了nginx的rewrite规则组成,在其中,我没有找到关于Apache的规则,在文档 2中,文档说明了为什么不使用.htaccess文件 并将Nginx和Apache进行比较。众所周知,Nginx不支持.htaccess规则,开源中国的站长红薯曾发过一篇文章:谁说nginx不支持.htaccess,在我看来,红薯是在混淆视听,偷换了概念,我们说的是.htaccess规则,而红薯说的是.htaccess文件。

说了那么多废话。接下来我分析一下nginx为什么不支持.htaccess,主要有以下几个方面。

1. 性能需要:在文档2中我们可以知道,Apache处理伪静态规则时会依次搜索各个目录下的.htaccess文件,这样就会造成大量的查询,影响性能,与Nginx的设计理念不符。

2. 软件模式决定:Apache设计时便是动态加载这一点,可以从Apache处理.htaccess文件看出来。你修改了.htaccess后,就可以马上 生效,包括Apache加载模块也是动态加载,而Nginx则是写死的规则,修改后需要重载nginx才可以.Tengine虽然提供了动态加载模块,但 仍需要重载设置才能生效,可以说是在”伪动态”。

3. 北方毛熊的自尊心作祟:Apache后面有美帝的身影,毛熊们觉得要是兼容了就有点低声下气。所以搞出自己的版本。

关于.htaccess应用于Nginx的可行性分析。在我看来,.htaccess不可能应用于LNMP平台的商业化。主要有以下几个原因:

1. 安全性较低。

由于Nginx是先加载配置文件,然后才运 行,所以,如果你用的虚拟主机有一个爱折腾的邻居,万一那个家伙手残了,改错了,你也会无法访问,随之遭殃。

2. 操作不便。

Nginx因为是先载入配置文件,所以,在每次修改完需要重启Nginx,你是否给用户ssh密码以方便其重启?如果不给密码使用php中的exec,又会有跨站的危险。如果开启了Chroot,exec就没有效果了。

总结:实际上nginx不仅仅支持.htaccess文件,你甚至可以使用.mp3来放伪静态规则。但是,为了安全起见,我建议你使用默认的conf文件来保存rewrite规则。毕竟,说不定那天手贱就把目录清空了,规则就没了。Nginx也因此崩溃

原文地址

完美解决nginx下wordpress固定链接404错误的方法

天在wordpress 下配置文章固定链接的时候,遇到了404的错误。我首先在wordpress下的设置里的“固定链接”配置页面,自定义链接的结构 “http://www.osetc.com/%postname%/,保存更改后,文章无法打开,无论是新编辑的文章还是之前的,都会出现404错误。那么这个问题该如何解决呢?或者说如何在ngix server解决这种问题?

首先我们应该更改网站域名所对应的配置文件,该配置文件的配置可以参照阿里云官方提供的nginx服务器配置视频。 比如本网站域名对应的conf文件为
osetc.com.conf.

默认的配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen       80;
server_name  www.osetc.com;
index index.html index.htm index.php;
root /alidata/www/osetc.com;
//注意此处,将下面的几行if代码copy到这里
location ~ .*.(php|php5)?$
{
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}

需要添加的代码:

1
2
3
4
5
6
7
8
9
10
11
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}

if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}

if (!-f $request_filename){
rewrite (.*) /index.php;
}

上面的代码也可以从ngix安装目录下获得:

1
2
3
4
[root@osetc.com]#ls /nginx-1.0.4/conf/rewrite

default.conf     discuz_x2.conf  phpcms.conf   shopex.conf
discuz_7.2.conf  ecshop.conf     phpwind.conf  wordpress.conf

打开上面wordpress.conf文件,你就可以看到我们要添加的代码