Install Nginx, PHP, MySQL (Mariadb) on Ubuntu

-Would you be kind to me in which direction to go?
-In the famous you, – replied the cat.
-I don’t know it.
-So, in the unknown. In any case, it is known that in a known time you will find yourself therrre or herrre,-purring cat.

Nginx Installation:

apt update
apt install nginx

Installing PHP and the MariaDB driver

apt install php-fpm php-mysqlnd php-xml

Creating Virtual Domains

mkdir /var/www/
chmod -R 755 /var/www/

In the /etc/nginx/sites-available directory, we create a file

The contents of the file

server {
     listen 80;

     root /var/www/;

     # Add index.php to the list if you are using PHP
     index index.php index.html index.htm index.nginx-debian.html;
    location / {
               try_files $uri $uri/ =404;
               if (!-e $request_filename) {
                  rewrite ^.+/?(/wp-.*) $1 last;
            rewrite ^.+/?(/.*\.php)$ $1 last;
                  rewrite ^(.+)$ /index.php?q=$1 last;

location ~ \.php$ {
               include snippets/fastcgi-php.conf;
               fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

Now you need to reboot the Webserver

service nginx restart

Checking PHP work

In /var/www/ , we will create the index.php file and write in it:

<?php phpinfo(); ?>

Next, open your website in the browser, in the example we use and if everything is done correctly, we see this picture:


sudo apt install mariadb-server mariadb-client

Security settings


Answer the questions:

Create a database and a user.

Entering the MARIADB:

mysql -u root

If you set the password to root:

mysql -u root -p
CREATE USER 'nameus'@'localhost' IDENTIFIED BY 'user_password';

For the user_password place, enter the user password.

GRANT ALL ON domaindb. * to nameus @ localhost;

Deploying WordPress

cd /var/www/
curl -O
tar xzvf latest.tar.gz
mv wordpress/* .
rmdir wordpress
chown -R www-data:www-data /var/www/
chmod -R 755 /var/www/

Perl. Search for short domains-2 solutions

There are situations when you need to find a free and short domain, for example, three-character.
I chose the .net domain zone for myself

Method One:
On the internet it is possible to find not actual today bases, for example:
But the problem is that this base is for 2014 and it is already outdated. But in case you have a budget of about $30, you can buy this file up-to-date.
Scripts that will help to get all three-character domains from a file have been written in Perl.

open(my $fh, "<", "zone.txt") or die "Can't open file: $!";
open(my $wh, '>', "custom.txt") or die "Can't open file: $!";
while (<$fh>) {
  my @array = split /\s+/, $_;
  if ((@array[1] eq "NS")&&(@array[0] ne $tmp)&&(length @array[0] == 3)){
    print $wh @array[0]."\n";
  [email protected][0];
  if ($cou%100000==0){
    print "$cou\n";
close $fh;
close $wh;
open(my $fh, "<", "custom.txt")
or die "Can't open file: $!";
chomp(my @lines = <$fh>);
close $fh;
@list=sort @lines;
open(my $fh, ">", "sorted.txt")
or die "Can't open file: $!";
foreach (@list) {
  print $fh "$_\n";
close $fh;

This script takes all three-letter domains from the zone. txt file and saves them to the file custom. txt, and then sorts the found domains alphabetically and saves the sorted list to the file sorted. txt.

The second script:

open(my $fh, "<", "sorted.txt")
or die "Can't open file: $!";
chomp(@lines = <$fh>);
close $fh;
open(my $wh, '>', "free.txt") or die "Can't open file: $!";
my $cou=0;
for(my $i=1; $i < scalar @letters; $i++){
  for(my $j=0; $j < scalar @letters; $j++){
    for(my $k=1; $k < scalar @letters; $k++){
      [email protected][$i][email protected][$j][email protected][$k];
        print $wh $dmn."\n";
        if($cou %100 == 0){
          print $cou.", ";
close $wh;
print "ok";
sub isPresent(){
  my ($dmn)[email protected]_;
    if ($_ eq $dmn){
      return 1;
  return 0;

Loads the file sorted. txt and generates all possible combinations of three-character domains from 0-0 to ZZZ, then checks whether these domains exist in the sorted. txt file and if they are not, the file free. txt is created.
Just these names you will be able to use to select and register already your domain.

The second way:
If you do not have access to the actual files of domain zones, you can write a bot that will take all possible combinations of domain name, and using the command nslookup will find all unregistered. The problem is that if the domain is purchased but it is not recorded, it will be considered free-“Non-existent domain”, as a result, we get about 1000 false positives.

Listing bot:

print "Generating all domains names... \n";
my @domains;
for(my $i=1; $i < scalar @letters; $i++){
  for(my $j=0; $j < scalar @letters; $j++){
    for(my $k=1; $k < scalar @letters; $k++){
      push @domains, @letters[$i][email protected][$j][email protected][$k].'.net';
print "Scaning... \n"; unless(open FILE, '>free-domains.txt') {
  die "\nUnable to create $file\n";
close FILE;
my $cou=0;
foreach my $domain (@domains)
  my $output = qx(nslookup -type=ns $domain 2>&1);
  my $r_c=$?;
  print "|";
  if((index $output, "Non-existent domain") > -1){
    print "\n".$domain."\n";
    open(my $wh, '>>', "free-domains.txt");
    print $wh $domain."\n";
  print "\nLast checked($cou): ".$domain."\n";

Bot saves everything as it considers free domains in the file free-domains. txt
The resulting list can be run through any bulk domain verification service, I used
Sending to check on 200-300 domains, through this service, you can quickly, iterate over the entire list, and free domains will fit in the Recycle Bin.
Here is the result of the search for today: