存档

作者存档

如何在ubuntu 16.04 上安装Nginx

2017年12月9日 没有评论

概述

Nginx 是世界上最受欢迎的web服务器,许多大流量的主机都采用Nginx作为服务器。在大多数场景下作为web服务器的Nginx比Apache更加节省资源,它也可当作反向代理服务器。

本文主要介绍如何在ubuntu16.04上安装Nginx

前提条件

开始以前,你需要有一个安装好的ubuntu16.04,并且你需要有一个拥有sudo权限的非root普通用户。

第一步:安装Nginx

Ubuntu默认的源中就有Nginx,所以安装是比较简单的。

首先,更新apt源,以便软件是最新的,然后就可以安装nginx:

  • sudo apt-get update
  • sudo apt-get install nginx

执行这两个命令之后,apt-get就会安装好Nginx和它依赖的软件。

第二步:配置防火墙

开始测试Nginx前,我们需要配置防火墙,以便允许外界访问nginx服务。Nginx在安装的时候使用ufw注册自己作为一个服务,这样对nginx的访问就会变得很容易。

显示所有ufw应用的配置:

sudo ufw app list

你可以得到一个配置的输出列表:

我们可以看到,有三个Nginx的配置:

  • Nginx Full: 这个配置打开 80端口和443端口
  • Nginx HTTP: 这个配置只打开80 (普通, 未加密通信)
  • Nginx HTTPS: 这个配置只打开 443 (TLS/SSL 加密通信 )

一般来说我们应该配置最严的限制,因为本文我们还没有配置SSL,所以我们只打开80端口。

我们执行:

验证修改状态:

我们可以看到HTTP是被打开的:

第三步: 检查你的web server

安装完成后,Ubuntu 16.04 会自动启动 Nginx. 我们可以使用systemd 检查运行状态:

输出

服务已经正常启动,当然最好的确认方法是通过访问web页面的方式。

如果我们能访问到默认加载页就证明启动成功了。

如果你不知道服务器的ip可以使用如下命令:

 

有了IP之后,在浏览器里输入:

http://server_domain_or_IP

你就能看到Nginx的默认加载页了:

Nginx default page

第四步: 管理 Nginx 进程

现在我们已经有nginx在运行了,我们可以再试一些管理命令:

停止nginx:

启动nginx:

重启nginx:

修改配置文件后,平滑加载配置命令(不会断开用户访问):

默认,nginx是随着系统启动的时候自动运行。如果你不想开机启动,那么你可以禁止nginx开机启动:

重新配置nginx开机自动启动:

第五步: 熟悉Nginx的文件和目录

现在我们已经管理nginx了,接下来可以熟悉一下nginx的目录结构和一些重要的文件:

网站文件位置

      • /var/www/html: 网站文件存放的地方, 默认只有我们上面看到nginx页面,可以通过改变nginx配置文件的方式来修改这个位置。

服务器配置

      • /etc/nginx: nginx配置文件目录。所有的nginx配置文件都在这里。
      • /etc/nginx/nginx.conf: Nginx的主配置文件. 可以修改他来改变nginx的全局配置。
      • /etc/nginx/sites-available/: 这个目录存储每一个网站的"server blocks"。nginx通常不会使用这些配置,除非它们陪连接到  sites-enabled 目录 (see below)。一般所有的server block 配置都在这个目录中设置,然后软连接到别的目录 。
      • /etc/nginx/sites-enabled/: 这个目录存储生效的 "server blocks" 配置. 通常,这个配置都是链接到 sites-available目录中的配置文件
      • /etc/nginx/snippets: 这个目录主要可以包含在其它nginx配置文件中的配置片段。重复的配置都可以重构为配置片段。

日志文件

    • /var/log/nginx/access.log: 每一个访问请求都会记录在这个文件中,除非你做了其它设置。
    • /var/log/nginx/error.log: 任何Nginx的错误信息都会记录到这个文件中。
分类: nginx 标签: ,

苹果ios同步icloud照片到新手机

2017年11月15日 没有评论

换了个新手机,想把icloud里面的照片下来。一直也没搞懂苹果的更新机制。

设置的是通过icloud恢复,结果发现没有可用备份。那只能设置为新手机了。

设为新手机后使用已有的icloud账户登录后,以前通讯录,照片会自动恢复。

设置方式是:照片需要打开 设置->照片->icloud照片图库

打开照片后发现里还是没有照片,网上查了查也看不到什么原理。

最后无意间发现照片有了。

原来是要想同步照片需要三个条件:
1.需要打开icloud照片图库
2.手机接入wifi
3.手机充电状态是。

才会下载照片到新手机。

分类: iOS/Mac 标签: ,

git skip worktree文件恢复

2017年10月20日 没有评论

从远程pull文件一致报error: Your local changes to the following files would be overwritten by merge:
提示有文件未commit,可是本地已经无文件可,后来发现提示未提交这些文件都是skip worktre文件,需要恢复取消skipwork状态,然后暂存本地的修改,再进行pull远程文件就可以了。

把所有标记为skip worktree的问价取消标记命令:

git ls-files -v 显示所有文件的状态
grep -i ^S cut -c 3- 提取从第三个字符开始到结尾,去掉状态只保留路径
tr '\012' '\000'替换换行符 (\012) 为 (\000)
xargs -0 git update-index --no-skip-worktree 把以0分割的路径字符传给 git update-index --no-skip-worktree 取消

忽略修改,从而不用提交到库里面。
git update-index --assume-unchanged /path/file

如果想恢复该文件,可以用
git update-index --no-assume-unchanged /path/file 来恢复跟踪

分类: 小技巧 标签:

TCP连接建立的三次握手与连接断开四次挥手

2017年9月4日 没有评论

TCP三次握手

一、什么是三次握手

三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

二、三次握手的目的

三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。客户端执行连接请求时。将触发三次握手。

三、三次握手过程

第一次握手:
客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
第二次握手:
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的ISN加1以.即X+1。
第三次握手.
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。如果正确则连接建立成功,客户端和服务器进入ESTABLISHED状态,完成三次握手,随后客户端与服务器之间可以开始传输数据了。把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1。

TCP四次挥手

一、什么是四次挥手

TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,任何一方执行close操作即可产生挥手操作。

二、四次挥手过程

第一次挥手:

客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户机进入FIN_WAIT_1状态。
第二次挥手:

服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。
第三次挥手:

服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
第四次挥手:

客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。

有限状态机FSM:Finite State Machine
1、CLOSED 没有任何连接状态
2、LISTEN 侦听状态,等待来自远方TCP端口的连接请求
3 、SYN-SENT 在发送连接请求后,等待对方确认
4、SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
5、ESTABLISHED 代表传输连接建立,双方进入数据传送状态
6、FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
7 、FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
8、 TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
9、CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
10、LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失

11、CLOSING 双方同时尝试关闭传输连接,等待对方确认

附加问题:

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次挥手?
答:因为当服务器收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来回应的,SYN报文是用来同步的。但是关闭连接时,当服务器收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,”发送的FIN报文已经收到”。只有等到客户端所有的报文都发送完了,客户端才能发送FIN报文,因此不能一起发送。故需要四步挥手。
【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:四个报文都发送完毕,客户端和服务器可以直接进入CLOSE状态了,但有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文,确保之前的数据不会丢失后再进入close状态。

原文:http://www.178linux.com/85976

分类: 网络编程 标签:

tcpdump抓取http的请求头和响应信息

2017年8月21日 没有评论

tcpdump过滤HTTP的GET请求:

sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

tcpdump过滤HTTP的POST请求:

sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

tcpdump过滤HTTP的请求和响应头信息,以及请求和响应消息体信息:

tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

分类: linux 标签:

The listener supports no services

2017年8月14日 1 条评论

[oracle@localhost ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 14-AUG-2017 13:56:45

Copyright (c) 1991, 2013, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 14-AUG-2017 13:54:44
Uptime 0 days 0 hr. 2 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/product/11gR2/network/admin/listener.ora
Listener Log File /home/oracle/product/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

tlister启动没有服务

#netmgr
在database services下增加实例名配置,替换红色部分为你的实例名。

客户端连接报错:
ORA-12541:TNS:no listener
把127.0.0.1 替换为你机器的ip

分类: oracle 标签:

oralce删除数据库

2017年8月14日 没有评论

sqlplus / as sysdba
SQL> startup
ORACLE instance started.

Total System Global Area 2.0176E+10 bytes
Fixed Size 2261928 bytes
Variable Size 2818575448 bytes
Database Buffers 1.7314E+10 bytes
Redo Buffers 41463808 bytes
Database mounted.
Database opened.
SQL> alter database close;

Database altered.

SQL> alter system enable restricted session;

System altered.

SQL> drop database;

Database dropped.

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With

删除 /etc/oratab
删除 rm -rf product/
删除 rm -rf oraInventory/

未关闭的进程杀掉
[root@localhost ~]# ps -ef|grep ora
root 4736 3961 0 13:17 pts/2 00:00:00 su - oracle
oracle 4737 4736 0 13:17 pts/2 00:00:00 -bash
oracle 4763 1 0 13:18 ? 00:00:00 /home/oracle/product/11gR2/bin/tnslsnr LISTENER -inherit
root 5482 3790 0 13:36 pts/1 00:00:00 grep ora
[root@localhost ~]# kill -9 4763

这样重新安装数据库,不会报实例冲突

分类: oracle 标签:

eclipse工程有红色叹号

2017年7月11日 没有评论

eclipse有红色叹号;

一般情况可以这样处理,处理方法来自网络

1,右键项目名称 BuildPath ---> Configure Build Paht...中,然后上面有几个选项卡找到 Libraries中出现红色叉号的包为路径错误的包。到classpath中修改相应包的当前路径。然后回到eclipse中F5刷新工程。

不行的话可以试试clean项目;

project--->clean

如果你的eclipse项目有红色叹号,而Libraries中没有出现红色叉号的包,我是这样做的。

1,先把eclipse转换到Markers视图,windows---->show view ---->markers

你会发现这些报错内容,
Archive for required library: ‘XXXXXXXX001’ in project ‘xxxxxxxxx’ cannot be read or is not a valid ZIP file
2,用记事本打开项目根目录的.classpath文件,找到“”这一行,删掉

保存,刷新后,这个报错就没有了,从而红色叹号也没有了。

分类: java 标签:

word按tab不能多级标题

2017年7月5日 没有评论

使用word 2010 ,经常用到tab键进行列表等级变换,但是在某些情况下,tab键不能回退到下一级,那么就需要修复word此功能。
1第一步,打开word 2010 ,选择“文件”-> “选项”:
2第二步,在弹出框中选择“校对”,然后选择“自动更正选项(A)...”:
3第三步,在弹出框中选择“键入时自动套用格式”标签卡,在“用Tab和Backspace设置左缩进和首行缩进”前打勾:
4最后,保存退出

分类: 小技巧 标签:

nginx的location、root、alias指令用法和区别

2017年4月4日 5 条评论

nginx指定文件路径有两种方式root和alias,指令的使用方法和作用域:
[root]
语法:root path
默认值:root html
配置段:http、server、location、if
[alias]
语法:alias path
配置段:location

root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
alias是一个目录别名的定义,root则是最上层目录的定义。
还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~

root实例:

如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。

alias实例:

如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。注意这里是new_t,因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。

注意:
1. 使用alias时,目录名后面一定要加"/"。
3. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
4. alias只能位于location块中。(root可以不放在location中)

分类: nginx 标签: