I have not follow the entire discussion. What is the goal to do with wp-admin?
There are several ways to limit access: - http basic auth - use a x509 cert to authenticate instead of user/pass - write a hook plugin to wp_login() to use you own / external login - just use fail2ban to keep bad guys out - ... On 16.04.20 16:46, Francis Daly wrote: > On Wed, Apr 15, 2020 at 12:52:59PM +0200, Lawrence wrote: > > Hi there, > >> To start, I am very much a beginner to nginx and coding. I am a application >> support engineer, but got very little development skills. > > I don't know WordPress; but on the nginx side, what matters is the > request that is made (the url, handled in a "location") and the way that > you want nginx to handle that request. > > In nginx (in general), one request is handled in one location; > only the configuration in, or inherited into, that location > matters. Location-matching does not include the request query > string. Inheritance is per directive, and is either by replacement or > not at all. The "*_pass" directives are not inherited; the others are. > > There are exceptions to this description, but it is probably a good > enough starting point to understanding the configuration that is needed. > > The documentation for any directive X can be found from > http://nginx.org/r/X > >> My goal is to have the sites available but the access to all wp admin must >> be limited. >> below are a few of the solutions I found. Non seem to work fully. I assume >> it is my understanding of nginx configuration. >> >> method #1 -- test unsuccessfully. > > In this case, does "unsuccessful" mean: the php file is not handled > when it should be; or the php file is handled when it should not be; or > something else? In general, it is good to be specific -- what request was > made, what response was returned, and what response was wanted instead. > > > So, with me not knowing WordPress, your mail and some brief web searching > suggests that you want your nginx to do the following: > > * allow any access to any request that ends in ".php", except > * restrict access to the request /wp-login.php and > * restrict access to any php request that starts with /wp-admin/, except > * allow any access to /wp-admin/admin-ajax.php > > where "restrict" is to be based on an infrequently-changing list of IP > addresses or address ranges. > > And this is in addition to the normal "try_files" config to just get > wordpress working. > > Is that an accurate description of the desired request / response > handling mapping? > > If so, something like (untested): > > === > include fastcgi.conf; # has fastcgi_param, etc, but not fastcgi_pass > # Can directly paste the relevant lines here instead > > location / { > try_files $uri $uri/ /index.php?$args; > } > location ~ \.php$ { > location ~ ^/wp-admin/ { > allow 192.168.1.0/24; > deny all; > fastcgi_pass unix:/run/php/php7.0-fpm.sock; > } > fastcgi_pass unix:/run/php/php7.0-fpm.sock; > } > location = /wp-login.php { > allow 192.168.1.0/24; > deny all; > fastcgi_pass unix:/run/php/php7.0-fpm.sock; > } > location = /wp-admin/admin-ajax.php { > fastcgi_pass unix:/run/php/php7.0-fpm.sock; > } > === > > looks like it should work. There are other ways to arrange things, > and there is repetition here of the "allow" list; it may be simpler to > maintain that list twice than to use another "include" file. > > If you are happy to test and report what fails, then it should be possible > to end up with a suitable config. > > Good luck with it, > > f > _______________________________________________ nginx mailing list nginx@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx